# 1.2.3.15.立即呼叫的函數表示式（IIFEs）

* 複習前面所提過的[函式陳述句](https://jenhsuan.gitbooks.io/javascript-node-js/content/chapter1/1236han-shu-chen-shu-ju-yu-han-shu-biao-shi-shi.html), JavaScript engine看到函數時會將牠放到記憶體中, 但是在呼叫時才會執行
  * 寫法如下:

    ```
      greet('John');
      function greet(name) {
          console.log('Hello ' + name);
      }
    ```
* 函數表達式, 一開始不會被放到記憶體中, 直到執行這行時, JavaScript engine會立即創造這個物件
  * 寫法如下:

    ```
    var greetFunc = (name) {
          console.log('Hello ' + name);
      }
    greetFunc('John');
    ```
* 立即呼叫的函數表達式 (immediately invoked function expression, IIFE)
  * 在函數創造後立即呼叫, 寫法如下:

    ```
    var greeting = function(name) { 
      return Hello ' + name; 
    }('John');

    console.log(greeting);
    ```
* 當想要一個函式陳述句, 但又不使用函式陳述句的寫法
  * 因為在括號內的東西一定要是**陳述式**

    ```
    // 不會執行
    (function (name) {
      return 'Hello ' + name;
    });

    //IIFE
    (function (name) {
      console.log('Hello ' + name);
    }('John'));

    //或這樣寫
    (function (name) {
      console.log('Hello ' + name);
    })('John');
    ```
