相关疑难解决方法(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万
查看次数

在循环中添加"click"事件侦听器

onClickhtml标签中的标准重构为监听器,遇到了我的代码问题:

var td;
    for (var t=1;t<8;t++){
        td = document.getElementById('td'+t);
        if (typeof window.addEventListener==='function'){
                td.addEventListener('click',function(){
                    console.log(td);
            })}
 }  
Run Code Online (Sandbox Code Playgroud)

td单击元素时,假设td用循环中的最后一个索引单击,例如7
看起来像是eventListeners仅填充了此循环中的最后一个元素.
循环初始化看起来正确
为什么会这样?

这是实时代码

javascript events loops listeners click

21
推荐指数
3
解决办法
4万
查看次数

标签 统计

javascript ×2

loops ×2

click ×1

closures ×1

events ×1

listeners ×1