### (IIFE)s 是什麼? - 我們已經認識了陳述式 & 表達式: ### 1. 陳述式: - 當我們宣告這段函數時,JavaScript 會將此函數 greet() 放入記憶體中,但不會馬上被執行。 ```js // function statement function greet(name) { console.log(`hello` + name); } // 你需要呼叫函數時,陳述式函數才會被執行。 greet("Ted"); ``` ### 2. 表達式: - 這段代碼不像陳述式函數會立刻被放在記憶體中,而是執行了這個變數以後,創造這個函數物件,去執行它。 - 並且用**指向它的記憶體變數來執行**。 - 也是目前最多人在使用的(React)。 ```js // using a function expression var greetFunc = function (name) { console.log(`hello ` + name); }; greetFunc("Wilson"); ``` ### 3. IIFEs,立即調用表達式: ```js var greeting = (function (name) { console.log("Hello " + name); })("Ted"); //立即調用函數。在函數表達式的末尾使用括號 (),表示立即調用該函數。這意味著該函數會立即執行。 // outpus: Hello Ted ``` - 不使用 IIFEs 的表達式: - 輸出一段函數內容,但沒有實際執行 `return` 內容。 ```js var greeting = function (name) { return `Hello ` + name; }; console.log(greeting); // outputs: ƒ (name) { return `Hello ` + name; } ``` ### 更正確地獲取結果方式: ```js var greeting = (function (name) { return `Hello ` + name; })("Ted"); console.log(greeting); // Hello Ted ``` - 簡單來說,IIFEs 立即函數,可以避免作用域污染的問題 使函數在執行以後就立刻被銷毀,實務上相當的便利。