无法在IIFE功能中保存“count”的副本

所以我有一个名为count的全局变量,它在两个函数声明之间从0到4变化(请参阅myFuncs数组)。

我想创建一个闭包,并保存第一个函数的计数为0和第二个函数的计数为4的副本。

不知何故,即使我正在使用IIFE(立即调用的函数表达式)来创建新的词法作用域并以(作为j)保存计数副本,它们仍然指向count = 4,因此,当函数执行时,第一次和第二次功能都打印出我的价值:4“两次,当我预期:

“我的价值:0”“我的价值:4”

var myFuncs = {};

var count = 0;

myFuncs[0] = function(){
    (function(){
        var j = count; //create a closure over the count value and save it inside the IIFE scope
        console.log("My value: " + j); //expecting j to be 0
    })();
}

count = 4;  //Update value inbetween two function declarations

//same as above but the j here should be 4
myFuncs[1] = function(){
    (function(){
        var j = count; //create a closure over the count value and save it inside the IIFE scope
        console.log("My value: " + j);
    })();
}

myFuncs[0](); //My value: 4
myFuncs[1](); //My value: 4

你实际上并没有用这个变量创建一个闭包,因为你在函数中引用它。 它需要被传入,并且传入的值需要被使用。

        myFuncs[0] = function(j){
            return function(){
                console.log("My value: " + j);
            };
        }(count);
链接地址: http://www.djcxy.com/p/51617.html

上一篇: Unable to save copy of "count' within an IIFE function

下一篇: Why a nested IIFE is not creating closure?