Javascript闭包的一个例子
这样做的好处是内部函数可以访问定义外部函数的参数和变量。首先,让我们构建一个简单的对象。
复制代码代码如下所示:
无功testobj = { {
值:10,
新增:功能(公司){
this.value(typeof =公司= = = 公司):1;
}
};
TestObj.add();
testobj.value / / 11;
(2)testobj.add;
testobj.value / / 13;
这样,就存在着不能保证价值价值不被非法修正的问题,可以修改如下。
复制代码代码如下所示:
无功testobj =(函数(){()
var值= 10;
返回{
新增:功能(公司){
价值(typeof =公司= = = 公司):1;
},
GetValue:函数(){
返回值;
}
};
});
TestObj.add();
testobj.getvalue(11); / /
(2)testobj.add;
testobj.getvalue(13); / /
我们可以叫一个testobj初始化的一般形式的函数,该函数返回一个对象,函数定义了一个值的变量,变量的添加和getValue方法始终是可用的,但域的功能作用,它是不可见的其他项目。同时,我们也可以得出结论:内部功能外部功能比它更长的生命周期。
我们将继续查看构造函数调用的一个示例。
复制代码代码如下所示:
Var MyObj =功能(STR){
this.status = str;
};
myobj.prototype.getstatus =函数(){
返回this.status;
};
var obj =新myobj时(Javascript);
(obj。getStatus); / / Javascript
这没有错,但会有一点多此一举,为什么要去看望一个的getStatus方法可以直接访问的财产吗如果地位是私有财产,那当然是有道理的。
复制代码代码如下所示:
var obj =功能(状态){
返回{
getStatus:函数(){
返回状态;
}
};
};
var obj(Javascript myobj时=);
(myobj时。getStatus); / / Javascript
在这里,我们称之为对象时,它返回一个包含getStatus方法新的对象。一个对象的引用保存在myobj时。即使对象回来了getStatus方法仍然享有的特权访问obj对象的状态属性,getStatus方法不是复制的参数,它是获取参数本身。这可能是因为该函数可以访问它生成的语境,即关闭。