最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript閉包實例講解

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

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

首先,我們來構(gòu)造一個簡單的對象。

復(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


這樣寫就有一個問題,value值不能保證不會被非法修改,可以按如下的方法進行修改。
復(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)用一個函數(shù)的形式去初始化testObj,該函數(shù)會返回一個對象字面量,函數(shù)里定義了一個value變量,該變量對add和getValue方法總是可用的,但函數(shù)的作用域使得它對其他的程序來說是不可見的。同時,我們還可以得出一個結(jié)論,內(nèi)部函數(shù)擁有比它的外部函數(shù)更長的生命周期。

我們再繼續(xù)看一個構(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"


這樣寫并沒有錯,但是會有一點“多此一舉”,為什么要用一個getStatus方法去訪問一個本可以直接訪問到的屬性呢?如果status是私有屬性,那當然才有意義。
復(fù)制代碼 代碼如下:

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

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


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

相關(guān)文章

最新評論

内黄县| 鹤壁市| 宝山区| 海原县| 上饶县| 绥德县| 巴塘县| 翼城县| 八宿县| 海城市| 红原县| 二连浩特市| 集安市| 郑州市| 昌都县| 石泉县| 乌什县| 岳普湖县| 定陶县| 永德县| 永仁县| 黎平县| 玛曲县| 常山县| 满城县| 六枝特区| 三亚市| 威海市| 北京市| 顺平县| 宾阳县| 沈丘县| 前郭尔| 彭山县| 桓台县| 青铜峡市| 十堰市| 日喀则市| 庆安县| 保康县| 庄浪县|