欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript閉包實(shí)例講解

 更新時(shí)間:2014年04月22日 11:25:36   作者:  
眾所周知,JavaScript沒(méi)有塊級(jí)作用域,只有函數(shù)作用域。那就意味著定義在函數(shù)中的參數(shù)和變量在函數(shù)外部是不可見(jiàn)的,而在一個(gè)函數(shù)內(nèi)部任何位置定義的變量,在該函數(shù)內(nèi)部任何地方都可見(jiàn)

這帶來(lái)的好處是內(nèi)部函數(shù)可以訪問(wèn)定義它們的外部函數(shù)的參數(shù)和變量。

首先,我們來(lái)構(gòu)造一個(gè)簡(jiǎn)單的對(duì)象。

復(fù)制代碼 代碼如下:

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


這樣寫(xiě)就有一個(gè)問(wèn)題,value值不能保證不會(huì)被非法修改,可以按如下的方法進(jìn)行修改。
復(fù)制代碼 代碼如下:

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)用一個(gè)函數(shù)的形式去初始化testObj,該函數(shù)會(huì)返回一個(gè)對(duì)象字面量,函數(shù)里定義了一個(gè)value變量,該變量對(duì)add和getValue方法總是可用的,但函數(shù)的作用域使得它對(duì)其他的程序來(lái)說(shuō)是不可見(jiàn)的。同時(shí),我們還可以得出一個(gè)結(jié)論,內(nèi)部函數(shù)擁有比它的外部函數(shù)更長(zhǎng)的生命周期。

我們?cè)倮^續(xù)看一個(gè)構(gòu)造函數(shù)調(diào)用的例子。

復(fù)制代碼 代碼如下:

var MyObj = function(str){
    this.status = str;
};

MyObj.prototype.getStatus = function(){
    return this.status;
};

var obj = new MyObj("javascript");
obj.getStatus(); // "javascript"


這樣寫(xiě)并沒(méi)有錯(cuò),但是會(huì)有一點(diǎn)“多此一舉”,為什么要用一個(gè)getStatus方法去訪問(wèn)一個(gè)本可以直接訪問(wèn)到的屬性呢?如果status是私有屬性,那當(dāng)然才有意義。
復(fù)制代碼 代碼如下:

var obj = function(status){
    return {
        getStatus: function(){
            return status;
        }
    };
};

var myObj = obj("javascript");
myObj.getStatus(); // "javascript"


這里當(dāng)我們調(diào)用obj的時(shí)候,它返回包含getStatus方法的一個(gè)新對(duì)象,該對(duì)象的一個(gè)引用保存在myObj中,即使obj已經(jīng)返回了,但getStatus方法仍然享有訪問(wèn)obj對(duì)象的status屬性的特權(quán)。getStatus方法并不是訪問(wèn)該參數(shù)的一個(gè)副本,它訪問(wèn)的就是該參數(shù)本身。這是可能的,因?yàn)樵摵瘮?shù)可以訪問(wèn)它被創(chuàng)建時(shí)所處的上下文環(huán)境,這被稱(chēng)為閉包。

相關(guān)文章

  • JavaScript顯示當(dāng)然日期和時(shí)間即年月日星期和時(shí)間

    JavaScript顯示當(dāng)然日期和時(shí)間即年月日星期和時(shí)間

    使用js顯示當(dāng)然日期和時(shí)間在網(wǎng)頁(yè)中很是常見(jiàn),方法有很多,不過(guò)多說(shuō)大同小異,下面有個(gè)不錯(cuò)的示例,需要的朋友可以感受下
    2013-10-10
  • 5 種JavaScript編碼規(guī)范

    5 種JavaScript編碼規(guī)范

    編碼規(guī)范就是指導(dǎo)如何編寫(xiě)和組織代碼的一系列標(biāo)準(zhǔn),下面通過(guò)本文給大家?guī)?lái)了5 種JavaScript編碼規(guī)范,需要的朋友參考下
    2018-01-01
  • 淺談JavaScript中的this指針和引用知識(shí)

    淺談JavaScript中的this指針和引用知識(shí)

    this是javascript的一個(gè)關(guān)鍵字,隨著函數(shù)使用場(chǎng)合不同,this的值會(huì)發(fā)生變化。但是總有一個(gè)原則,那就是this指的是調(diào)用函數(shù)的那個(gè)對(duì)象。接下來(lái)通過(guò)本文給大家介紹js中的this指針和引用,非常不錯(cuò),需要的朋友參考下
    2016-08-08
  • JS的函數(shù)調(diào)用棧stack size的計(jì)算方法

    JS的函數(shù)調(diào)用棧stack size的計(jì)算方法

    本篇文章給大家分享了關(guān)于JS的函數(shù)調(diào)用棧stack size的計(jì)算方法的相關(guān)知識(shí)點(diǎn),有興趣的朋友參考學(xué)習(xí)下。
    2018-06-06
  • 使用ImageMagick進(jìn)行圖片縮放、合成與裁剪(js+python)

    使用ImageMagick進(jìn)行圖片縮放、合成與裁剪(js+python)

    由于需要在服務(wù)器端處理,使用就研究使用imagemagick來(lái)進(jìn)行。同時(shí)準(zhǔn)備封裝了一個(gè)Node.js和Python的方法,主要還是講一下然后使用imagemagick來(lái)對(duì)圖片進(jìn)行縮放、合成后進(jìn)行裁剪吧
    2013-09-09
  • shiro授權(quán)的實(shí)現(xiàn)原理

    shiro授權(quán)的實(shí)現(xiàn)原理

    這篇文章主要介紹了shiro授權(quán)的實(shí)現(xiàn)原理,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • addEventListener()和removeEventListener()追加事件和刪除追加事件

    addEventListener()和removeEventListener()追加事件和刪除追加事件

    這篇文章主要給大家介紹了關(guān)于addEventListener()和removeEventListener()追加事件和刪除追加事件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 鴻蒙系統(tǒng)中的 JS 開(kāi)發(fā)框架

    鴻蒙系統(tǒng)中的 JS 開(kāi)發(fā)框架

    最近華為鴻蒙OS 2.0正式開(kāi)源!關(guān)于鴻蒙的教程其實(shí)網(wǎng)上也已經(jīng)有一些嘗鮮的小伙伴分享了相關(guān)文章,這篇文章主要為大家詳細(xì)介紹了鴻蒙系統(tǒng)中的 JS 開(kāi)發(fā)框架,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • JavaScript去除空格的幾種方法

    JavaScript去除空格的幾種方法

    JavaScript去除空格的幾種方法...
    2006-10-10
  • javascript實(shí)現(xiàn)倒計(jì)時(shí)關(guān)閉廣告

    javascript實(shí)現(xiàn)倒計(jì)時(shí)關(guān)閉廣告

    這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)倒計(jì)時(shí)關(guān)閉廣告,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-02-02

最新評(píng)論