閉包中的變量

先看一段代碼

function out(){
    var arr = {};
    for(var i = 0; i < 3; i++) {
        arr[i] = function() {
            return i;
        }
    }
    return arr;
}

var f = out();
console.log(f[0]());

最終運行結果:3
arr是一個數組,里面的每個元素都是一個函數。f=out(),其實 f 等于 返回的 arr, f[0] 就等于 arr[0], 可以 console.log(f[0].toString()); 打印 f[0] 的定義。打印結果如下:

function () {
    return i;
}

執行 f0 的時候,return i,這個 i 應該是多少呢,這就是閉包引用函數外邊的值,這里注意,閉包里的 i 里面保存的是外面 i 的一個引用(參考:David Herman 的《Effective JavaScript》第 11 條)。這是外面的 i 的值是多少呢? 因為 i 是 var 聲明的,整個 function 內有效,每次 for 循環, i 都加 1, 所以最后結果是 3.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容