JavaScript閉包實(shí)例講解
這帶來的好處是內(nèi)部函數(shù)可以訪問定義它們的外部函數(shù)的參數(shù)和變量。
首先,我們來構(gòu)造一個簡單的對象。
var testObj = {
value: 10,
add: function(inc){
this.value += (typeof inc === "number") ? inc : 1;
}
};
testObj.add();
testObj.value; // 11
testObj.add(2);
testObj.value; // 13
這樣寫就有一個問題,value值不能保證不會被非法修改,可以按如下的方法進(jìn)行修改。
var testObj = (function(){
var value = 10;
return {
add: function(inc){
value += (typeof inc === "number") ? inc : 1;
},
getValue: function(){
return value;
}
};
})();
testObj.add();
testObj.getValue(); // 11
testObj.add(2);
testObj.getValue(); // 13
我們可以通用調(diào)用一個函數(shù)的形式去初始化testObj,該函數(shù)會返回一個對象字面量,函數(shù)里定義了一個value變量,該變量對add和getValue方法總是可用的,但函數(shù)的作用域使得它對其他的程序來說是不可見的。同時,我們還可以得出一個結(jié)論,內(nèi)部函數(shù)擁有比它的外部函數(shù)更長的生命周期。
我們再繼續(xù)看一個構(gòu)造函數(shù)調(diào)用的例子。
var MyObj = function(str){
this.status = str;
};
MyObj.prototype.getStatus = function(){
return this.status;
};
var obj = new MyObj("javascript");
obj.getStatus(); // "javascript"
這樣寫并沒有錯,但是會有一點(diǎn)“多此一舉”,為什么要用一個getStatus方法去訪問一個本可以直接訪問到的屬性呢?如果status是私有屬性,那當(dāng)然才有意義。
var obj = function(status){
return {
getStatus: function(){
return status;
}
};
};
var myObj = obj("javascript");
myObj.getStatus(); // "javascript"
這里當(dāng)我們調(diào)用obj的時候,它返回包含getStatus方法的一個新對象,該對象的一個引用保存在myObj中,即使obj已經(jīng)返回了,但getStatus方法仍然享有訪問obj對象的status屬性的特權(quán)。getStatus方法并不是訪問該參數(shù)的一個副本,它訪問的就是該參數(shù)本身。這是可能的,因?yàn)樵摵瘮?shù)可以訪問它被創(chuàng)建時所處的上下文環(huán)境,這被稱為閉包。
相關(guān)文章
JavaScript顯示當(dāng)然日期和時間即年月日星期和時間
使用js顯示當(dāng)然日期和時間在網(wǎng)頁中很是常見,方法有很多,不過多說大同小異,下面有個不錯的示例,需要的朋友可以感受下2013-10-10JS的函數(shù)調(diào)用棧stack size的計算方法
本篇文章給大家分享了關(guān)于JS的函數(shù)調(diào)用棧stack size的計算方法的相關(guān)知識點(diǎn),有興趣的朋友參考學(xué)習(xí)下。2018-06-06使用ImageMagick進(jìn)行圖片縮放、合成與裁剪(js+python)
由于需要在服務(wù)器端處理,使用就研究使用imagemagick來進(jìn)行。同時準(zhǔn)備封裝了一個Node.js和Python的方法,主要還是講一下然后使用imagemagick來對圖片進(jìn)行縮放、合成后進(jìn)行裁剪吧2013-09-09addEventListener()和removeEventListener()追加事件和刪除追加事件
這篇文章主要給大家介紹了關(guān)于addEventListener()和removeEventListener()追加事件和刪除追加事件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12javascript實(shí)現(xiàn)倒計時關(guān)閉廣告
這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)倒計時關(guān)閉廣告,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-02-02