Javascript 的“塊作用域” - LET

Javascript 的 1.7 版本加入了 let 關(guān)鍵字(該新特性屬于 ECMAScript 2015(ES6)規(guī)范,在使用時請注意瀏覽器兼容性)。let 關(guān)鍵字聲明了一個塊級作用域的本地變量,在聲明變量時可以的同時賦值。

與 var 不同的是,let 是把變量的作用域限制在塊級域中。var 聲明的變量要么是全局的,要么就是函數(shù)級別的,無法是塊級。塊級域可以理解為一個 if else 中,或者 for 循環(huán)域中。

下面是 var 聲明變量的例子??梢钥吹?,變量在聲明之后,在整個函數(shù)中都是可用的。如果想要聲明全局變量,把變量放到函數(shù)體外即可。

'use strict';

function foo(){

for (var i = 0; i < 10; i++) {

console.log('in block ' + i);

/* 塊級域內(nèi),i 可用*/

}

/* 函數(shù)域內(nèi),i 可用*/

console.log('out of block ' + i);

}

/*函數(shù)域外,i 不可用*/

foo();

下面是 let 聲明變量的例子,跟上面的代碼不同之處只有用 let 替換了 var。這樣變量就只在 for 循環(huán)體內(nèi)有效了。不管是在 for 循環(huán)之前還是之后訪問變量 i,都會提示 “ReferenceError: i is not defined” 的錯誤。

'use strict';

function foo(){

for (let i = 0; i < 10; i++) {

console.log('in block ' + i);

/* 塊級域內(nèi),i 可用*/

}

/* 函數(shù)域內(nèi),i 不可用*/

}

/*函數(shù)域外,i 是不可用*/

foo();

上面?zhèn)z個例子,var 聲明的變量是在整個函數(shù)作用域內(nèi)有效,let 是在 for 循環(huán)的塊級域內(nèi)有效。當然用 let 也可以聲明全局變量,把 let 放到函數(shù)體外就可以了,如下例子。

'use strict';

let i;

function foo(){

for ( i = 0; i < 10; i++) {

console.log('in block ' + i);

/* 塊級域內(nèi),i 可用*/

}

/* 函數(shù)域內(nèi),i 可用*/

console.log('out of block ' + i);

}

foo();

/*函數(shù)域外,i 可用*/

console.log('out of function ' + i);

已經(jīng)廢棄的 let 擴展

let block 和 let expression 的語法將要被廢除,請不要再使用,參見 鏈接1 和 鏈接2

let block 提供了一種在塊的范圍內(nèi)獲取變量的值,而不會影響塊外面名字相同的變量的值的方法。

'use strict';

var a = 1;

var b = 2;

let (a = a + 2, b = 3) {

console.log( a + b ); // 6

}

console.log( a + b ); // 3

let expression 提供建立一個變量,只在一個表達式中有效。

'use strict';

var a = 1;

let(a = 2) console.log(a); // 2

console.log(a); // 1

總結(jié)

變量聲明在任何開發(fā)語言中都是非?;A(chǔ)的內(nèi)容,變量的作用域可以分為全局變量和局部變量。在 javasctipt 中,作用域的概念和其他語言差不多, 在每次調(diào)用一個函數(shù)的時候 ,就會進入一個函數(shù)內(nèi)的作用域,當從函數(shù)返回以后,就返回調(diào)用前的作用域。但在 C 語言中,一個在 for 循環(huán)中定義的變量,是不可能在循環(huán)外被調(diào)用的。這是javascript 本身不嚴謹?shù)牡胤剑砸?let 關(guān)鍵字解決這個問題。

Javascript 是一種腳本語言,在腳本執(zhí)行時,是要經(jīng)過預(yù)編譯的。關(guān)于“JavaScript的作用域鏈”和“Javascript的預(yù)編譯”可以學(xué)習(xí)鳥哥的這篇文章。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • let 命令 塊級作用域 const 命令 頂層對象的屬性 global 對象 let 命令 基本用法 ES6 新...
    嘉奇呦_nice閱讀 1,702評論 0 2
  • let 和 const 命令 let 命令 塊級作用域 const 命令 頂層對象的屬性 gl...
    安小明閱讀 1,047評論 0 0
  • let 命令 塊級作用域 const 命令 頂層對象的屬性 global 對象 let 命令 基本用法 ES6 新...
    卞卞村長L閱讀 685評論 0 0
  • 本文屬個人筆記,不做詳解,僅供參考! let命令 基本用法 ES6 新增了let命令,用來聲明變量。它的用法類似于...
    R_yan閱讀 29,309評論 6 18
  • 不知道寫點啥,也許只是單純地打個卡,但如果能堅持下去,我相信這肯定是值得的! 北方的秋來的往年似乎更早了些,空氣中...
    居幽形愁閱讀 248評論 0 0

友情鏈接更多精彩內(nèi)容