es6 新增了let
命令,用來宣告變數。它的用法類似於var
,但是所宣告的變數,只在let
命令所在的**塊內有效。
for迴圈中let命令的使用:
結果:var a = ;
for (var i = 0; i < 3; i++) ;
}console.table([
a[0],a[1],a[2]
])
上面**中,變數i
是var
命令宣告的,在全域性範圍內都有效,所以全域性只有乙個變數i
。每一次迴圈,變數i
的值都會發生改變,
裡面的i
指向的就是全域性的i
。也就是說,所有陣列a
的成員裡面的i
,指向的都是同乙個i
,導致執行時輸出的是最後一輪的i
的值,也就是 4。
結果:var a = ;
for ( let i = 0; i < 3; i++) ;
}console.table([
a[0](),a[1](),a[2]()
])
上面**中,變數i
是let
宣告的宣告的變數僅在塊級作用域內有效,也就是當前的i
只在本輪迴圈有效,所以每一次迴圈的i
其實都是乙個新的變數。
var
命令會發生」變數提公升「現象,即變數可以在宣告之前使用,值為undefined
。let
命令改變了語法行為,它所宣告的變數一定要在宣告後使用,否則報錯。
只要塊級作用域內存在let
命令,它所宣告的變數就「繫結」(binding)這個區域,不再受外部的影響。
上面**中,存在全域性變數var test = 1;
if(1)
test
,但是塊級作用域內
let
又宣告了乙個區域性變數
test
,導致後者繫結這個塊級作用域,所以在
let
宣告變數前,對
test
賦值會報錯。
es6 明確規定,如果區塊中存在let
和const
命令,這個區塊對這些命令宣告的變數,從一開始就形成了封閉作用域。凡是在宣告之前就使用這些變數,就會報錯。
總之,在**塊內,使用let
命令宣告變數之前,該變數都是不可用的。這在語法上,稱為「暫時性死區」(temporal dead zone,簡稱 tdz)。
let
不允許在相同作用域內,重複宣告同乙個變數。
不許在函式內部重新宣告引數// 報錯
function func()
// 報錯
function func()
本文參考:ecmascript 6 入門-阮一峰function func(arg)
function func(arg)
}
ES6學習筆記1 let命令
1 新增let命令 a referenceerror a is not defined.b 1有一種情況很適合用let命令 for迴圈的計數器。for let i 0 i下面就用乙個例子來比較一下let和var在for迴圈計數器的不同,為什麼let更適合 var a for var i 0 i 8 ...
ES6的let命令(二)
2.暫時性死區 暫時性死區 是指只要塊級作用域內存在let命令,它所宣告的變數就繫結這個作用域,不會受到外部的影響。var num 12 if true num 20 let num 執行之後,在num 20這一行會出現如下錯誤 從上述 顯然可以看出,我們用var定義看乙個全域性變數,但是在 if語...
ES6中let和const詳解
let和var一樣也是用來定義變數,不同之處在於let是塊級作用域,只在所定義的塊級作用域中生效,乙個花括號便是乙個塊級作用域 console.log a 我是var定義的 console.log b b is not defined 可以看出let定義的變數在全域性作用域內並沒有生效 如果我們在全...