在Javascript函数中,经常有遇到闭包的情况。
如下面的代码
for (var i = 0; i < arr.length; i++) { arr[i].onclick = function() { console.log(i); }; }
此时输出的i的值全都是arr.length的值,因为出现了闭包。
解决方法:
for (var i = 0; i < arr.length; i++) { arr[i].i = i; arr[i].onclick = function() { console.log(this.i); } }
for (var i = 0; i < arr.length; i++) { (arr[i].onclick = function() { console.log(arguments.callee.i); }).i = i; }
for (var i = 0; i < arr.length; i++) { (function(arg) { arr[i].onclick = function() { console.log(arg); } })(i); }
for (var i = 0; i < arr.length; i++) { (function(arg) { var temp = i; arr[i].onclick = function() { console.log(temp); } })(); }
在这里记录下解决方案,以便以后查阅。如有错误之处或更多建议,请指出。