本文共 648 字,大约阅读时间需要 2 分钟。
写了一段这样的代码
例1
for(var i=0;i<10;i++){ btns[i].οnclick=function(){ alert(i); }}原意是每个按钮按一下弹出一个弹框来显示它的标号。
结果每次都是显示最后一个按钮的标号。
找原因找原因!
后来在网上找到了这个
例2
for(var i=0;i<10;i++){ btns[i].οnclick=(function(i){ return function(){alert(i)} })(i)}
这样一执行,果然就出现了预期的结果。
例3
for(var i = 0; i < 2; i++){ btns[i].onclick = function (){ alert(i); i = i + 1; } }
网上很多资料提到了闭包,然后说了好多东西来说明什么是闭包,有一个通俗的讲法是子函数中使用了父函数的私有变量。
第一种情况其实也是使用了闭包,只不过所有的子函数共用了父函数的一个私有变量,通过例3可以看出这一点,无论点击哪个按钮之后提示的数字都会自增一,而且两者的自增是连续的而不是独立的。
在第二个例子中,所有的子函数则是使用了父函数传入的参数,子函数的子函数则是使用了这个参数,由于参数传递对于数字来说是传值,所以每个子函数的参数则是全新的拷贝之后的数字对象。
转载地址:http://gvuws.baihongyu.com/