簡單的描述閉包:如果在函式func內部宣告函式inner,然後在函式外部呼叫inner,這個過程即產生了乙個閉包。
實現函式 makeclosures,呼叫之後滿足如下條件:
1、返回乙個函式陣列 result,長度與 arr 相同
2、執行 result 中第 i 個函式,即 result[i](),結果與 fn(arr[i]) 相同
輸入例子:
var arr = [1, 2, 3]; var square = function (x) ; var funcs = makeclosures(arr, square); funcs[1]();
輸出例子:
4
題目要求的是返回乙個函式陣列,如果在迴圈中直接寫result[i] = function()或者result.push(function()),最終的結果是不正確的,因為在每次迭代的時候,那樣的語句後面的方法並沒有執行,只是建立了乙個函式體為「return fn(arr[i]);」的函式物件而已,當迭代停止時,i為最終迭代停止的值,在函式被呼叫時,i依舊為最終迭代停止的值,因此無法返回正確的結果。
為了解決這個問題,需要宣告乙個匿名函式,並立即執行它。
function(num); }(i),函式執行後,i立即傳入並被內部函式訪問到,因此就能得到正確的結果。閉包允許你引用存在於外部函式中的變數。
下面的**使用的是foreach迴圈
1
2
3
4
5
6
7
8
9
10
11
function makeclosures(arr, fn) ;
}(e));
});
return
result;
}
js 閉包概念,用法
1 我們常說的閉包就是函式巢狀函式,內部函式可以引用外部函式的引數和變數 如下 2 會涉及到js中的垃圾 機制 指 當函式執行完時,函式的變數將會收回,閉包就不一樣了 如下 3 閉包中當外部函式載入完時,外部函式的變數內部函式還可以繼續使用,不會 如下 4 閉包的好處 將乙個變數長期駐紮在記憶體中 ...
詳解JS閉包概念
閉包理解 1.如何產生閉包?當乙個巢狀的內部 子 函式引用了巢狀的外部 父 函式的變數 函式 時,產生閉包 2.閉包到底是什麼?使用 chrome 除錯檢視 理解一 閉包是巢狀的內部函式 絕大部分人 理解二 包含被引用變數 函式 的物件 極少數人 注意 閉包存在於巢狀的內部函式中 3.產生閉包的條件...
閉包概念集合
一 建立閉包 建立閉包的常見方式,就是在乙個函式內部建立另乙個函式。二 作用域鏈 當某個函式被呼叫的時候,會建立乙個執行環境和相應的作用域鏈,然後使用arguments初始化物件。這個物件叫做活動物件。在作用域鏈中,外部函式的活動物件始終處於第二位。以此類推,直到作用域鏈終點 全域性執行環境。首先,...