隨着ES6的關注度的增高,今天有必要介紹下ES6中用let、const來定義變量。javascript
總說:java
const
關鍵字用在那些永遠不會改變的變量申明, let
用在其餘變量申明上。babel
(1)var 和letide
var,在離它最近的父函數內建立了一個變量的做用域 。函數
let,
在它最近的塊級中建立做用於,這些塊包括 for
循環, if
語句以及其餘塊。google
用實例來講話:指針
實例-1code
function fn ( ) { console . log ( x ) ; console . log ( y ) ; var x = 1 ; if ( x === 1 ) { let y = 2 ; } console . log ( y ) ; } fn ( ) ; console . log ( x ) ;
例中,建立了一個 fn
函數,而且調用它。最後一個 console.log()
語句會產生一索引
個 ReferenceError
,由於 x
只在 fn()
中定義(做用域)。由於變量提高,第一個ip
console.log()將被正常執行。在這個示例中, x
是 undefined
。第二和第三個
console.log(y) 都將出錯,由於 let
比 var
的做用於更加嚴格。 y
變量 只存在於 if
塊裏面,
不在任何其餘地方。俗稱「 臨時死亡區 「。
實例-2:
function fn ( x ) { let y ; if ( x == 1 ) { y = 2 ; } console . log ( y ) ; } fn (1) ; console . log ( y ) ;
在實例-2中,y有比實例-1更大範圍的做用域。由兩個實例的對比,在ES6中 let
應該徹底取
代 var
。
(2)const
在ES6中, const
表明一個值的 常量索引 (大多數語言都提供這樣的功能),即:變量名字在
內存中的指針不可以改變,可是指向這個變量的值 可能改變。並非一個常量。
(3)說明
新的 let
和 const
關鍵字在ES5中是不生效的,而且在絕大多數可執行環境中也不生效。
可是,經過相似 Babel 優秀的編譯器, 咱們能夠將咱們寫的ES6 JavaScript代碼編譯爲可在瀏
覽器環境中執行的ES5代碼。