javascript 闭包
1 理解作用域
1 我们构造一个myObject 对象,它拥有一个value属性和一个increment的方法,假定我们希望保护该值不会被非法更改
var myObject = function(){
var value = 0;
return {
increment:function(inc){
value +=typeof inc === "number"?inc:1;
},
getValue:function(){
return value;
}
}
}();//直接执行,返回结果
我们并没有把一个函数值复制myObject.而是把调用该函数后返回的记过赋值了它。这些方法继续享有访问value变量的特权。
2 var quo = function(status){
return {
get_status:function(){
return status;
}
};
};
var myQuo = quo("amazed");
myQuo.get_status();//amazed
该方法被设计成无须加new来使用,所以名字也没有字母大写。当调用quo时,返回包含get_statsu方法的一个新对象。保存在myQuo中,get_statsu依然享有访问参数本身的权利。
因为该函数可以访问它被创建时所处的上下文环境,这就被成为闭包。
get_status方法
3 再来一个例子
var add_the_handlers = function(node){
var i;
for(i=0;i<nodes.length;i++){
node[i].onclick = function(){
alert(i);
};
}
};
点击某个栏目弹出提示,结果测试会每次都弹出同一个数值。
因为每个调用的都是最后的i值。
修改:
var add_the_handlers = function(node){
var i;
for(i=0;i<nodes.length;i++){
node[i].onclick = function(i){
return function(e){
alert(i);
};
}(i);
}
};
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。