文章出處
文章列表
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就一直加
文章列表
全站熱搜