【函數(shù)表達(dá)式】模仿塊級作用域

1、JavaScript沒有塊級作用域的概念。
2、在塊語句中定義的變量,實(shí)際上是在包含函數(shù)中而非語句中創(chuàng)建的。
3、JavaScript中多次聲明同一變量不會(huì)出錯(cuò),它只會(huì)對后續(xù)的聲明視而不見,但是會(huì)執(zhí)行后續(xù)聲明中的變量初始化。

匿名函數(shù)可以模仿塊級作用域。

//用作塊級作用域(通常稱為私有作用域)的匿名函數(shù)的語法
(function(){
    //塊級作用域
})();

上面代碼定義并立即調(diào)用了一個(gè)匿名函數(shù)。
將函數(shù)聲明包含在一對圓括號中,表示它實(shí)際上是一個(gè)函數(shù)表達(dá)式。而緊隨其后的另一對圓括號會(huì)立即調(diào)用這個(gè)函數(shù)。

但是下面的代碼會(huì)導(dǎo)致錯(cuò)誤。

function(){
    //塊級作用域
}();

因?yàn)镴avaScript將function關(guān)鍵字當(dāng)做一個(gè)函數(shù)聲明的開始,而函數(shù)聲明后面不能跟圓括號,函數(shù)表達(dá)式后面可以跟圓括號。

臨時(shí)需要一些變量,就可以使用私有作用域:

function outputNumbers(count){
    (function () {
        for(var i = 0;i<count;i++){
            alert(i);
        }
    });
    alert(i);    //導(dǎo)致一個(gè)錯(cuò)誤!
}

匿名函數(shù)模仿塊級作用域經(jīng)常在全局作用域中被用在函數(shù)外部,從而限制向全局作用域中添加過多的變量和函數(shù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容