簡體   English   中英

JavaScript關閉。 JS引擎如何選擇閉包變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM