標籤:設定 col 方法 技術 closure data code object instance
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‘); // 返回 undefineddb(‘x‘, 1); // 設定data[‘x‘]為1db(‘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就一直加
js 閉包執行個體