巧妙地利用闭包确实能够完成很多复杂的需求,但是一些不经意间造成的闭包也会带来意想不到的问题,总结如下:
1.点击li显示下标
初看简单死了!不就是循环添加事件嘛
for(var i = 0;i< lis.length;i ++){
lis[i].onclick = function(){
console.log(i)
}
}
然而打印的结果全都是(lis.length-1)这个数字。
一种解决方法是为li自定义下标属性,也就是
for(var i = 0;i < lis.length;i++){
lis[i].index = i;
lis[i].onclick = function(){
console.log(this.index);
}
}
2.一个经典的闭包问题
function a(){
var arr = [];
for(var i = 0;i < 10;i ++){
arr[i] = function(){
console.log(i);
}
}
return arr;
}
var demo = a();
for(var j = 0;j < 10;j ++){
demo[j]();
}
打印10个10,初学闭包时纠缠了很久的问题,哈哈