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ù)。