4-5编程
来源:4-5 编程练习
田马达加斯加
2018-11-02 15:00:12
for(var i=0;i<btns.length;i++){
(function(i){
btns[i].onclick=function(){
alert(i+1);
};
})(i)
}
为什么这样写就不会先将for循环执行完后,再执行里边的函数了
1回答
不管代码怎么写,都是先将for循环执行完毕,给每个按钮绑定上点击事件,这样点击代码的时候才会执行事件。这道题考察的是i的作用域的问题。
如果使用立即执行函数,传入i参数就是局部变量,在执行点击事件的时候,会沿着当前的作用域向上找i的值,因为当前作用域中保存了i的值,也就是每一个按钮对象的i值,所以点击按钮的时候,会弹出相对应的i值。
开始编程题中的代码点击按钮弹出4,是因为当前作用域中没有i值,就找到了for循环里面,在for循环执行完毕之后,i的值变为了3,所以无论点击哪个按钮,弹出的数值都为4。
这就是两段代码的区别。
自己可以测试理解下,祝学习愉快!
相似问题