![](/img/trans.png)
[英]Javascript instantiation in a closure. How to make Factory and Model independent?
[英]JavaScript Closure. How does JS engine choose Closure Variables?
這是JS Closure概念的代碼示例。
function buildFunctions() {
var arr = [];
for (var i = 0; i < 3; i++) {
arr.push((function(j) {
return function() {
console.log(j);
}
}(i)));
}
return arr;
}
var fn = buildFunctions();
fn[0]();
fn[1]();
fn[2]();
在這段代碼中,我知道循環何時開始運行,並且對於每個“ i”值(對於每個IIFE),將在JS引擎中分別創建變量j = 1,2,3的新執行上下文。 因此,當循環結束時,從3個IIFE返回的三個函數將位於var arr中,並且各個IIFE的執行上下文將消失,但在閉包中仍具有其j = 1,2,3的可變環境。 因此,現在arr將具有
var arr = [function{console.log(j)},function{console.log(j)},function{console.log(j)}]
我的問題是如何在數組中調用這些函數, fn[0]()
選擇j = 0, fn[1]()
選擇j = 1, fn[2]()
從閉包中選擇j = 2。 ?
如果我的理解有誤,請幫助我...
當循環結束時[…]相應IIFE的執行上下文將消失
好吧,它們並沒有消失-這就是關閉的重點 。
每個閉包都會使創建的上下文保持活動狀態-因此,每個函數都有各自作用域和各自值的變量j
的引用。
該函數記錄j
的值。
j
的值是作為參數傳遞給外部匿名函數的值。
在(立即)將該函數作為i
的值調用時指定。
i
只有一個價值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.