成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript函數(shù)表達(dá)式——“函數(shù)模仿塊級(jí)作用域及函數(shù)的私有變量”的注意要點(diǎn)

archieyang / 2535人閱讀

摘要:模仿塊級(jí)作用域在塊級(jí)語(yǔ)句中定義的變量,實(shí)際上是包含函數(shù)中而非語(yǔ)句中創(chuàng)建的。避免對(duì)全局作用域產(chǎn)生不良影響這種方式可以通過(guò)創(chuàng)建私有作用域,避免對(duì)全局作用域產(chǎn)生不良影響。一般包括函數(shù)的參數(shù)局部變量和內(nèi)部定義的其他函數(shù)。

模仿塊級(jí)作用域

在塊級(jí)語(yǔ)句中定義的變量,實(shí)際上是包含函數(shù)中而非語(yǔ)句中創(chuàng)建的。如:

function outputNumbers(x){
    for (var i = 0; i < x; i ++){
        console.log(i);
    }
    var i; //即使重新聲明了變量仍然不起作用
    console.log(i); //123
}
outputNumbers(4); //4
()()方法模仿塊級(jí)作用域

通常用塊級(jí)作用域(私有作用域)的匿名函數(shù)的語(yǔ)法來(lái)解決這個(gè)問題:

(function(){
    //這里是塊級(jí)作用域
})();

無(wú)論什么地方,只要臨時(shí)需要一些變量,就可以使用私有作用域,如:

function outputNumbers(x){
    (function(){
        for (var i = 0; i < x; i ++){
            console.log(i);
        }
    })()
}
outputNumbers(4); //0123

又如:

function outputNumbers(x){
    (function(){
        for (var i = 0; i < x; i ++){
            console.log(i);
        }
    })()
    var i;
    console.log(i);  //undefined
}
outputNumbers(4);

這樣一來(lái),變量i 只能在循環(huán)中使用,使用后即被銷毀。實(shí)際上他也屬于閉包。

避免對(duì)全局作用域產(chǎn)生不良影響

這種方式可以通過(guò)創(chuàng)建私有作用域,避免對(duì)全局作用域產(chǎn)生不良影響。

var num = 100;
(function(){
    if (num > 10){
        console.log("greater than 10");
    }
})();

(function(){
    if (num > 10){
        console.log("greater than 10");
    }
})();
//兩者完全一樣,相互獨(dú)立,互不影響
私有變量

在js 中,任何在函數(shù)中定義的變量,都可以認(rèn)為是私有變量。一般包括函數(shù)的參數(shù)、局部變量和內(nèi)部定義的其他函數(shù)。如:

function add(num1,num2){
    var sum = num1 + num2;
    return sum;
}

其中這個(gè)函數(shù)的內(nèi)部就有3個(gè)私有變量:num1、num2 和sum。

另外我們把有權(quán)訪問私有變量和私有函數(shù)的公有方法稱為特權(quán)方法。如:

function MyObject(){
    var privateVariable = 10;
    function privateFunction(){
        return false;
    }
    this.publicMethod = function(){
        privateVariable ++;
        return privateFunction();
    };
}    
var x = new MyObject();
console.log(x.publicMethod()) ;//false

利用私有和特權(quán)成員,可以隱藏那些不應(yīng)該被直接修改的數(shù)據(jù)。如:

function Person(name){
    this.getName = function(){
        return name;
    };
    this.setName = function(setName){
        name = setName;
    };
}

var person = new Person("Oliver");
console.log(person.getName());
person.setName("Oli"); //Oliver
console.log(person.getName()); //Oli
靜態(tài)私有變量

私有作用域中定義私有變量和函數(shù),同樣也可以創(chuàng)建特權(quán)方法,如:

(function(){
    var privateValue = 10;
    function privateFunction(){
        return false;
    }
    
    MyObject = function(){}; //沒有var 屬于全局變量,嚴(yán)格模式下會(huì)報(bào)錯(cuò)
    
    MyObject.prototype.publicMethod = function(){
        privateValue ++;
        return privateFunction();
    };
})();

var instance = new MyObject();
console.log(instance.publicMethod()); //false
模塊模式

針對(duì)單例創(chuàng)建私有變量和特權(quán)方法。單例就是只有一個(gè)實(shí)例的對(duì)象。如:

var singleton = {
    name: value,
    method: function(){
        
    }
};

添加私有變量以及特權(quán)方法:

var singleton = function(){
    var privateVariable = 10;
    
    function privateFunction(){
        return false;
    }
    
    return {
        publicProperty: true,
        publicMethod: function(){
            privateVariable++;
            privateFunction();
        }
    };
}();

簡(jiǎn)化:

var a = function(){
    var x;
    function y(){};
    return {
        z1,
        z2
    };
}();
增強(qiáng)的模塊模式

這種模式適合那些單例必須是某種類型的實(shí)例。如:

var singleton = function(){
    var privateVariable = 10;
    
    function privateFunction(){
        return false;
    }
    
    var object = new CustomType();
    
    object.publicProperty = true;
    
    object.publicMethod = function(){
        privateVariable++;
        return privateFunction();
    };
    return object;
}();

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/78214.html

相關(guān)文章

  • JavaScript引用類型——“單體內(nèi)置對(duì)象”注意要點(diǎn)

    摘要:?jiǎn)误w內(nèi)置對(duì)象單體內(nèi)置對(duì)象就是開發(fā)人員不必顯式地實(shí)例化內(nèi)置對(duì)象,因?yàn)樗麄円呀?jīng)實(shí)例化了。前面的章節(jié)討論過(guò)了大多數(shù)內(nèi)置對(duì)象,還定義了兩個(gè)單體內(nèi)置對(duì)象和。 單體內(nèi)置對(duì)象 單體內(nèi)置對(duì)象就是開發(fā)人員不必顯式地實(shí)例化內(nèi)置對(duì)象,因?yàn)樗麄円呀?jīng)實(shí)例化了。前面的章節(jié)討論過(guò)了大多數(shù)內(nèi)置對(duì)象,ECMA-262 還定義了兩個(gè)單體內(nèi)置對(duì)象:Global 和Math。 Global 對(duì)象 所有在全局作用域中定義的屬性...

    xushaojieaaa 評(píng)論0 收藏0
  • JavaScript函數(shù)達(dá)式——“函數(shù)遞歸和閉包”注意要點(diǎn)

    摘要:如調(diào)用函數(shù)聲明函數(shù)不會(huì)報(bào)錯(cuò)使用函數(shù)表達(dá)式則不可以報(bào)錯(cuò)創(chuàng)建函數(shù)的兩種方式,一個(gè)是函數(shù)聲明如第一種方式一個(gè)是函數(shù)表達(dá)式如第二種方式。第二種函數(shù)創(chuàng)建方式創(chuàng)建的函數(shù)叫匿名函數(shù)或拉姆達(dá)函數(shù),因?yàn)殛P(guān)鍵字后面沒有標(biāo)識(shí)符。 函數(shù)表達(dá)式的基本概念 name屬性和函數(shù)提升 首先,name屬性,通過(guò)這個(gè)屬性可以訪問到給函數(shù)指定的名字。(非標(biāo)準(zhǔn)的屬性)如: function People(){}; cons...

    winterdawn 評(píng)論0 收藏0
  • JavaScript引用類型——“Function類型”注意要點(diǎn)

    摘要:類型每個(gè)函數(shù)都是類型的實(shí)例。如以上代碼可行,是因?yàn)樵诖a開始值錢,解析器就已經(jīng)通過(guò)一個(gè)名為函數(shù)聲明提升的過(guò)程,讀取并將函數(shù)聲明添加到執(zhí)行環(huán)境中去。也可同時(shí)使用函數(shù)聲明和函數(shù)表達(dá)式,但在瀏覽器中會(huì)出錯(cuò)。 Function 類型 每個(gè)函數(shù)都是Function 類型的實(shí)例。函數(shù)名實(shí)際上就是一個(gè)指向函數(shù)對(duì)象的指針,不會(huì)與某個(gè)函數(shù)綁定。 函數(shù)聲明方式創(chuàng)建Function,語(yǔ)法如下: functi...

    fantix 評(píng)論0 收藏0
  • JavaScript引用類型——“RegExp類型”注意要點(diǎn)

    摘要:類型通過(guò)類型來(lái)支持正則表達(dá)式。如由于構(gòu)造函數(shù)的模式參數(shù)是字符串,所以在某些情況下要對(duì)字符串進(jìn)行雙重轉(zhuǎn)義。而第二個(gè)循環(huán)使用構(gòu)造函數(shù)在每次循環(huán)沖創(chuàng)建正則表達(dá)式。如另外,還有個(gè)用于存儲(chǔ)捕獲組的構(gòu)造函數(shù)屬性。 EegExp 類型 ECMAScript 通過(guò)RegExp 類型來(lái)支持正則表達(dá)式。語(yǔ)法如下: var expression = / pattern / flags; 每個(gè)正則表達(dá)式都可...

    mochixuan 評(píng)論0 收藏0
  • 深入理解javascript原型和閉包

    摘要:深入理解原型和閉包王福朋博客園深入理解原型和閉包一切都是對(duì)象原文鏈接本文要點(diǎn)一切引用類型都是對(duì)象,對(duì)象是屬性的集合。每個(gè)對(duì)象都有一個(gè),可稱為隱式原型。另外注意,構(gòu)造函數(shù)的函數(shù)名第一個(gè)字母大寫規(guī)則約定。 深入理解javascript原型和閉包 王福朋 - 博客園 —— 《 深入理解javascript原型和閉包》 1. 一切都是對(duì)象 原文鏈接:http://www.cnblogs.com...

    jemygraw 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<