无法在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