文章出處

var db = (function() {
// 創建一個隱藏的object, 這個object持有一些數據
// 從外部是不能訪問這個object的
var data = {};
// 創建一個函數, 這個函數提供一些訪問data的數據的方法
return function(key, val) {
    if (val === undefined) { return data[key] } // get
    else { return data[key] = val } // set
    }
// 我們可以調用這個匿名方法
// 返回這個內部函數,它是一個閉包
})();

db('x'); // 返回 undefined
db('x', 1); // 設置data['x']為1
db('x'); // 返回 1
// 我們不可能訪問data這個object本身
// 但是我們可以設置它的成員

1.當function里嵌套function時,內部的function可以訪問外部function里的變量。

 

2. 外部變量(環境變量?),

包括:

  2.1 全局變量,包括DOM。

  2.2 外部函數的變量或函數。

如果一個函數訪問了它的外部變量,那么它就是一個閉包。

從技術上來講,在JS中,每個function都是閉包,因為它總是能訪問在它外部定義的數據。

 

 

 

沒return的閉包:

 function closureExample() {
            var temp = 10;
            setTimeout(function () {
                console.log(++temp);
            }, 1000);
        }
        closureExample()

閉包實例:

  function demo() {
            var temp = 5;
            function add() {
                console.log(temp++);
            }
            return add;
        }
        var demeInstance = demo();
        //console中調demeInstance,temp就一直加

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()