# 1.2.3.16.框架小叮嚀：IIFEs 與安全程式碼

* 執行一段程式碼:
  * 行1: [全域執行環境 (global Execution context)](https://jenhsuan.gitbooks.io/javascript-node-js/content/chapter1/121zhi-xing-huan-jing-yu-ci-hui-huan-jing/1211quan-yu-huan-jing-yu-quan-yu-wu-jian.html)的記憶體會空出greeting的位置,並賦值 (greeting: 'Hola')
  * 行2 \~ 5: 括號被呼叫而建立一個新的[執行環境](https://jenhsuan.gitbooks.io/javascript-node-js/content/chapter1/121zhi-xing-huan-jing-yu-ci-hui-huan-jing/1212zhi-xing-huan-jing-ff1a-chuang-zao-yu-ti-sheng.html), 記憶體會空出greeting的位置,並賦值 (greeting: 'Hello')

    ```
    1 var greeting = 'Hola';
    2 (function (name) {
    3    var greeting = 'Hello';
    4    console.log(greeting + ' ' + name);
    5 }('John'));
    ```
  * 可以發現兩個greeting不相衝突
  * 因此IIFE可以確保裡面的程式碼不會與其他東西衝突, 保障其安全, 因此在很多的函式庫中都會大量使用IIFE
* 如果想在IIFE中取用全域變數呢?
  * 傳入全域變數的參考

    ```
    var greeting = 'Hola';

    (function (global, name) {
     var greeting = 'Hello';
     console.log(greeting + ' ' + name);
    }(window, 'John'));
    ```
