ES6新特性 let的使用

2021-10-10 10:01:46 字數 2999 閱讀 6641

```css

<

!doctype html>

"en"

>

"utf-8"

>

"viewport" content=

"width=device-width, initial-scale=1.0"

>

document<

/title>

<

/head>

/* es6新增了let命令,用來宣告變數

它的用法類似var,但所宣告的變數,只在let命令所在的**塊內有效

*/console.

log(b)

;//1

console.

log(a)

;//uncaught referenceerror: a is not defined

for(let i=

0;i<

10;i++

) console.

log(i)

;//net defined

//for迴圈的計數器,全域性作用域中的i(var宣告);

//var宣告中,所有的陣列成員i都指向乙個同乙個i,

//即程式執行到最後得出最終值

var a=

;for

(var i=

0;i<

10;i++);

};a[7]

();//10

//for迴圈的計數器,塊級作用域中的i

//let宣告,宣告的變數i只在塊級作用域內有效

//即迴圈一次,js內部會記住乙個迴圈值,每一輪迴圈都會有乙個新的值

var a=

;for

(let i=

0;i<

10;i++);

};a[7]

();for

(let i=

0;i<

3;i++

)//abc 輸出三次

for(var i=

0;i<

3;i++);

//abc 輸出一次

/* 不存在變數提公升

1.使用var命令會出現變數提公升現象,

即變數可以在宣告之前使用,值為undefined

這並不符合正常邏輯

2.let命令改變了語法行為,

它所宣告的變數一定要在宣告後使用,否則報錯

*/eg:

console.

log(foo)

; var foo=2;

//輸出undefined

console.

log(bar)

; let bar=2;

//報錯referenceerror

/* 暫時性死區

1.只要塊級作用域內存在let命令,

它所宣告的變數就 "繫結"這個區域,不再受外部影響

即塊級作用域中的let優先順序高於全域性作用域中的var

2.es6中明確規定,如果塊區中存在let和const命令,

這個塊區對這些命令宣告的變數從一開始就形成了封閉作用域

凡在此之前就使用這些變數就會報錯。

即在**塊內,使用let命令宣告變數之前,這些變數都是不可用的

,這些在語法上稱為"暫時性死區",temporal dead zone,簡稱tdz

暫時性死區意味著typeof不再是乙個百分之百安全的操作

3.暫時性死區的本質就是,只要一進入當前作用域,

所要使用的變數就已經存在,但是不可獲取

只有等到宣告變數的哪一行**出現,才可以獲取和使用該變數

*/eg:

var tmp=

123;if(

true

)//referenceerror;if(

true

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

// function func()

// function func()

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

function

func

(arg)

func()

//報錯 identifier 'arg' has already been declared

function

func

(arg)

}func()

;//不報錯

/* 塊級作用域

沒有塊級作用域的弊端:

1.內層變數可能會覆蓋外層變數

2.用來計數的迴圈變數洩露為全域性變數

塊級作用域的優點:

塊級作用域可任意巢狀

塊級作用域的出現使得廣泛應用的匿名函式不再必要

es6塊級作用域新特性:

允許在塊級作用域內宣告新函式

函式宣告類似於var,即會提公升到全域性作用域或函式作用域的頭部

同時,函式宣告還會提公升到所在的塊級作用域的頭部

es6的塊級作用域必須有大括號,如果沒有大括號,js引擎就認為不存在塊級作用域

*/functionf1(

) console.

log(n);}

f1();

//5//執行結果為5,表明外層**塊不受內層**塊的影響

console.log (instance)

;//報錯 instance is not defined}}

}}}//第四層作用域無法讀取第五層作用域的內部變數

//內層作用域可以定義外層作用域的同名變數}}

}//大括號的使用

//if(true) let x=1;//報錯,因為沒有大括號,所以js引擎預設為沒有塊級作用域if(

true

)<

/script>

<

/body>

<

/html>

ES6新特性 let和const的使用

宣告,本文的所有 均在node的最新穩定版本v4.4.3中執行的,如果在瀏覽器中執行請把js的執行環境提公升為es6 以前一直用var定義變數,現在有了兩種新的定義變數的方式,1 let,2 const 本文大概概括下使用let和const定義變數有哪些好處 使用var宣告變數,存在宣告提前的問題,...

ES6新特性 let和const的使用

宣告,本文的所有 均在node的最新穩定版本v4.4.3中執行的,如果在瀏覽器中執行請把js的執行環境提公升為es6 以前一直用var定義變數,現在有了兩種新的定義變數的方式,1 let,2 const 本文大概概括下使用let和const定義變數有哪些好處 使用var宣告變數,存在宣告提前的問題,...

es6新特性 ES6新特性(一)

var 1 var宣告的是函式作用域 區域性 但在if for等定義的變數是全域性的 2 var 具有變數提公升,預解析 3 在同乙個作用域下,var可以宣告多次 4 var 宣告的變數會掛載到window上 let1 let不存在變數提公升,在變數使用之前,必須要先宣告 2 let在同一作用域下,...