首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JavaScript内部循环闭包-简单实用示例?

JavaScript内部循环闭包-简单实用示例?
EN

Stack Overflow用户
提问于 2018-08-02 00:21:13
回答 2查看 0关注 0票数 0

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

它的输出如下:

我的价值:3 我的价值:3

而我希望它能输出:

我的价值:0我的价值:1我的价值:2

当使用事件侦听器导致函数运行延迟时,也会出现相同的问题:

代码语言:txt
复制
var buttons = document.getElementsByTagName("button");
for (var i = 0; i < buttons.length; i++) {          // let's create 3 functions
  buttons[i].addEventListener("click", function() { // as event listeners
    console.log("My value: " + i);                  // each should log its value.
  });
}
代码语言:txt
复制
<button>0</button><br>
<button>1</button><br>
<button>2</button>

解决办法是什么?

EN

回答 2

Stack Overflow用户

发布于 2018-08-02 08:25:21

你要做的是将每个函数中的变量绑定到函数外部的一个单独的不变值:

代码语言:txt
复制
var funcs = [];

function createfunc(i) {
    return function() { console.log("My value: " + i); };
}

for (var i = 0; i < 3; i++) {
    funcs[i] = createfunc(i);
}

for (var j = 0; j < 3; j++) {
    funcs[j]();                        // and now let's run each one to see
}

票数 0
EN

Stack Overflow用户

发布于 2018-08-02 10:07:59

试试:

代码语言:txt
复制
var funcs = [];

for (var i = 0; i < 3; i++) {
    funcs[i] = (function(index) {
        return function() {
            console.log("My value: " + index);
        };
    }(i));
}
for (var j = 0; j < 3; j++) {
    funcs[j]();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100001851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档