我不确定为什么以下代码段出现错误(改编自JavaScript closure inside loops – simple practical example):

var funcs = {};
for (var i = 0; i < 3; i++) {          // let's create 3 functions
    funcs[i] = (function(n) {            // and store them in funcs
        console.log("My value: " + n); // each should log its value.
    })(i);
}
for (var j = 0; j < 3; j++) {
    funcs[j]();                        // and now let's run each one to see
}


看来这应该运行正常;我知道这只是我不完全了解的事情。

这是我得到的错误:


感谢任何帮助

最佳答案

您需要返回一个函数,而不是该函数的结果。尝试:

funcs[i] = (function(n) {
  return function() {
    console.log("My value: " + n);
  }
})(i);


例:

> var funcs = {};
for (var i = 0; i < 3; i++) {
  funcs[i] = (function(n) {
    return function() {console.log("My value: " + n);}
  })(i);
}
for (var j = 0; j < 3; j++) {
  funcs[j]();
}
My value: 0
My value: 1
My value: 2

关于javascript - 测试用立即函数重写一个简单的循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18407986/

10-16 13:36