for(var i =0;i<5;i++)
{
button = document.createElement("button");
button.innerHTML = "Button" + i;
document.body.appendChild(button);
button.addEventListener("click",function(e){alert(i);},false);
}
结果是创建了5个按钮,但是每个按钮点击后都会弹出5,不知道为什么??
我本以为这样也可以,希望点击的时候回触发函数x,但是每次创建一个按钮就会自动触发函数x???
for(var i =0;i<5;i++)
{function x(e){alert(e)}
button = document.createElement("button");
button.innerHTML = "Button" + i;
document.body.appendChild(button);
button.addEventListener("click",x(i),false);
}
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
i 不在 function (e) {} 这个作用域里,向上一直找到for 下面那级作用域,而这个i一直在++,for循环执行完毕i就是5
最后i是5啊, 你想想
循环执行完后,i的值最终被赋值为5,执行click事件的回调函数时,才会去作用域中查找i变量的值,自然就alert出5,因为ES5没有块级作用域,所以只能利用函数作用域,一个闭包的匿名函数自执行即可,分别创建单独的变量。