什么是闭包:
当内部函数 在定义它的作用域 的外部 被引用时,就创建了该内部函数的闭包 ,如果内部函数引用了位于外部函数的变量,当外部函数调用完毕后,这些变量在内存不会被 释放,因为闭包需要它们.
1.var name = "The Window";
var object = {
name : "sss",
name : "xxx",
getNameFunc : function(){
return function(){
return this.name;
};
}
};
alert(object.getNameFunc()()); //The Window 匿名函数中的this对象具有全局性
2.var name = "The Window";
var object = {
name : "sss",
name : "xxx",
getNameFunc : function(){
return this.name;
}
};
alert(object.getNameFunc()); //xxx 作为对象属性的函数,this对象即为当前对象
3.var name = "The Window"; //延伸的,这个我会。
var object = {
name : "sss",
name : "xxx",
getNameFunc : function(){
return function(){
return this.name;
};
}
};
alert(object.getNameFunc()); //function(){ return this.name; }
闭包循环问题:
问题:每次点击都只弹出-1;
解决方案:
1.将下标作为对象属性
2.创建闭包空间,保存每一个i变量;
- 用形参方式保存i
- 不用传递参数的方式,而是创建临时变量保存
3.将事件绑定在匿名函数返回函数上;
- 用形参方式保存i
- 不用传递参数的方式,而是创建临时变量保存
4.将下标添加为绑定函数的属性
5.创建块级变量