相关疑难解决方法(0)

循环内的JavaScript闭包 - 简单实用的例子

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

它输出这个:

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

而我希望它输出:

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


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

var buttons = document.getElementsByTagName("button");
// let's create 3 …
Run Code Online (Sandbox Code Playgroud)

javascript closures loops

2689
推荐指数
25
解决办法
34万
查看次数

setTimeout() - 用于随机延迟的for循环

可能重复:
循环内部的Javascript闭包 - 简单实用的例子

看过许多帖子谈论setTimeout和关闭,但我仍然无法传递一个简单的for循环计数器.

for (i = 0; i < 5; i++) {
  setTimeout(function () {
    console.log(i);
  }, Math.floor(Math.random() * 1000));
}
Run Code Online (Sandbox Code Playgroud)

5
5
5
5
5

想拥有

0
1
2
3
4

怎么了 ?
请不要火焰,我以为我已经理解了这个setTimeout()故事,但显然没有.

javascript closures settimeout

10
推荐指数
1
解决办法
2万
查看次数

标签 统计

closures ×2

javascript ×2

loops ×1

settimeout ×1