```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在同一作用域下,...