所以我有一个名为count的全局var,它在两个函数声明之间从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
答案 0 :(得分:1)
您实际上并没有使用该变量创建闭包,因为您在函数中引用它。它需要传入,并且需要使用传递的值。
myFuncs[0] = function(j){
return function(){
console.log("My value: " + j);
};
}(count);