如何在for循环及其索引内部函数的javascript中创建动态函数

时间:2017-01-08 14:16:33

标签: javascript asynchronous

    var data = ["s","a"]
    var asyncFunctionss = [];

    for (var i in data) {
        asyncFunctionss.push(function (callback) {
            console.log(i);
        });
    }
    for (var g in asyncFunctionss) {
        asyncFunctionss[g]();
    }

我尝试运行此程序,它提供以下输出。

预期产出

0

1

实际输出

1

1

如何实现预期输出?

1 个答案:

答案 0 :(得分:2)

您需要IIFE。原因是,只要调用 asyncFunctionss 中的函数元素,变量 i 就已经是1.您可以使用IIFE来记住变量 i的值

var data = ["s","a"]
var asyncFunctionss = [];

for (var i in data) {
  (function(i){
    asyncFunctionss.push(function (callback) {
        console.log(i);
    });
  })(i);
}
for (var g in asyncFunctionss) {
    asyncFunctionss[g]();
}