Javascript 闭包 - 无法在 IIFE 函数中保存 "count' 的副本

标签 javascript function scope closures iife

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

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

不知何故,即使我正在使用 IIFE(立即调用的函数表达式)创建新的词法范围并使用 (as j) 保存 count 的副本,它们仍然指向 count = 4,因此当函数执行后,第一个和第二个函数都按预期打印了两次“My value: 4”:

“我的值(value):0” “我的值(value):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);

关于Javascript 闭包 - 无法在 IIFE 函数中保存 "count' 的副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46170345/

相关文章:

javascript - 列出站点使用的所有 js 全局变量(并非全部定义!)

javascript - 使用 jQuery 对象表示法的变量闭包

c - 使用局部变量的递归,仅从一个 "function-part"可见

javascript - 创建嵌套数组javascript

javascript - 如何在 Javascript 中将 UTC 时间转换为本地时间

matlab - 了解 matlabFunction

PHP支持一流的函数,是什么意思

c++ - 使用虚函数 C++ 创建 Die 类

php - 类 - 构造函数中需要冲突

javascript - 选项卡导航不适用于 Mozilla Firefox 上的自动完成文本框