一、let命令
1)let的作用域只在**塊內,塊外無效;var全域性有效
var a = ;
for(var i = 0;i < 10;i++);
}a[6]();
對於這段**,變數i是var宣告的,在全域性範圍內有效,所以每一次迴圈,新的i值都會覆蓋舊值,導致最後輸出的是最後一輪的i值
如果使用let,宣告的變數僅在塊級作用域內有效,即只在本輪有效,所以每一次的迴圈其實都是乙個新的變數,最後將輸出6
2)let不像var會有變數提公升,所以變數一定要在宣告後使用,否則報錯
3)暫時性死區:
只要塊級作用域內存在let命令,它所宣告的變數就「繫結」這個區域,不在受外部的影響。
var tmp = 123;
if(true)
這段**中存在全域性變數tmp,但是塊級作用域內let又宣告了乙個區域性變數tmp,導致後者繫結這個塊級作用域,所以在let宣告變數前,對tmp賦值會報錯。
es6明確規定,如果區塊中存在let和const命令,則這個區塊對這些命令宣告的變數從一開始就形成封閉作用域。只要在宣告之前就使用這些變數,就會報錯。(暫時性死區)
暫時性死區的本質就是:只要一進入當前作用域,所要使用的變數就已經存在,但是不可以獲取,只有等到宣告變數的哪一行**出現,才可以獲取和使用該變數。
4)不允許重複宣告,否則報錯
5)es6允許塊級作用域任意巢狀
內層作用域可以定義外層作用域的同名變數
塊級作用域外部無法呼叫塊級作用域內部定義的函式
二、const
const用來宣告常量,一旦宣告,其值就不可以更改
const一旦宣告常量,就必須立即初始化
const的作用域和let命令相同:只在宣告所在的塊級作用域內有效
const命令宣告的常量也不提公升,同樣存在暫時性死區,只能在宣告後使用
es5只有兩種宣告變數的方法:var命令和function命令
es6除了新增let和const之外,還新增了import和class命令,共有6中宣告變數的方法
ES6標準入門 6 陣列的擴充套件
擴充套件運算子 spread 例子1 es5 的寫法 function f x,y,z let args 0,1,2 es6 的寫法 f args 例子2 es5 的寫法 let arr1 0,1,2 let arr2 3,4,5 es6 的寫法 arr1.push arr2 與解構賦值結合 函式的...
《ES6標準入門》 字串擴充套件
感覺暫時用不到,手動忽略。兩者都是返回字串給定位置的字元 charat es5語法,不支援unicode編號大於0xffff的字元 at es7語法,支援unicode編號大於0xffff的字元。abc charat 0 a abc at 0 a 傳統js語法 indexof 傳統js語法,返回指定...
ES6標準入門之Generator函式(基礎篇)
從語法上來講,可以將它理解成狀態機,封裝了多個內部狀態。generator函式是es6提供的一種非同步程式設計解決方案,語法與傳統函式完全不同。執行generator函式會返回乙個遍歷器物件。返回的遍歷器物件可以依次遍歷generator函式內部的每乙個狀態。function generator v...