1 ES6 let命令詳解

2021-08-19 19:55:19 字數 1876 閱讀 6202

es6 新增了let命令,用來宣告變數。它的用法類似於var,但是所宣告的變數,只在let命令所在的**塊內有效。

for迴圈中let命令的使用:

var a = ;

for (var i = 0; i < 3; i++) ;

}console.table([

a[0],a[1],a[2]

])

結果:

上面**中,變數ivar命令宣告的,在全域性範圍內都有效,所以全域性只有乙個變數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]()

])

結果:

上面**中,變數ilet宣告的宣告的變數僅在塊級作用域內有效,也就是當前的i只在本輪迴圈有效,所以每一次迴圈的i其實都是乙個新的變數。

var命令會發生」變數提公升「現象,即變數可以在宣告之前使用,值為undefinedlet命令改變了語法行為,它所宣告的變數一定要在宣告後使用,否則報錯。

只要塊級作用域內存在let命令,它所宣告的變數就「繫結」(binding)這個區域,不再受外部的影響。

var  test = 1;

if(1)

上面**中,存在全域性變數

test

,但是塊級作用域內

let又宣告了乙個區域性變數

test,導致後者繫結這個塊級作用域,所以在

let宣告變數前,對

test賦值會報錯。

es6 明確規定,如果區塊中存在letconst命令,這個區塊對這些命令宣告的變數,從一開始就形成了封閉作用域。凡是在宣告之前就使用這些變數,就會報錯。

總之,在**塊內,使用let命令宣告變數之前,該變數都是不可用的。這在語法上,稱為「暫時性死區」(temporal dead zone,簡稱 tdz)。

let不允許在相同作用域內,重複宣告同乙個變數。

// 報錯

function func()

// 報錯

function func()

不許在函式內部重新宣告引數

function func(arg) 

function func(arg)

}

本文參考:ecmascript 6 入門-阮一峰

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定義的變數在全域性作用域內並沒有生效 如果我們在全...