ES6部分的let命令
let宣告作用域{}
宣告的變數僅在塊級作用域內有效
var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 6
let
命令改變了語法行為,它所宣告的變數一定要在宣告後使用,否則報錯。
// var 的情況
console.log(foo); // 輸出undefined,var會執行這一條語句給foo一個空間,但是並不會賦值給他
var foo = 2;
// let 的情況
console.log(bar); // 報錯ReferenceError
let bar = 2;
暫時性死區
只要塊級作用域記憶體在let
命令,它所宣告的變數就“繫結”(binding)這個區域,不再受外部的影響。
var tmp = 123;
if (true) {
tmp = 'abc'; // ReferenceError
let tmp;
}
在程式碼塊內,使用let
命令宣告變數之前,該變數都是不可用的。這在語法上,稱為“暫時性死區”(temporal dead zone,簡稱 TDZ)。
if (true) {
// TDZ開始
tmp = 'abc'; // ReferenceError
console.log(tmp); // ReferenceError
let tmp; // TDZ結束
console.log(tmp); // undefined
tmp = 123;
console.log(tmp); // 123
}
為什麼會需要塊級作用域
1.內層變數可能會覆蓋外層變數。
var tmp = new Date();
function f() {
console.log(tmp);
if (false) {
var tmp = 'hello world';
}
}
f(); // undefined
2.用來計數的迴圈變數洩露為全域性變數。
var s = 'hello';
for (var i = 0; i < s.length; i++) {
console.log(s[i]);
}
console.log(i); // 5
因此用ES6解決此類問題 :外層作用域無法讀取內層的作用域
function f1() {
let n = 5;
if (true) {
let n = 10;
}
console.log(n); // 5
}
相關文章
- ES6新增命令:let
- ES6 let和const命令
- ES6入門——let和const命令
- JavaScript let 命令JavaScript
- ES6中的let與var的區別
- es6 let const與var 的區別
- ES6中var,let,const的區別
- ES6中let 和 const 的新特性
- ES6中var/let/const的區別
- ES6語法——let和const
- ES6入門之let、cont
- ES6學習let&const
- [ES6深度解析]13:let const
- 【ES6基礎】let和作用域
- let與const命令
- ES6 let和var的區別是什麼?
- ES6 let 與 const的應用介紹
- es6學習之let和const
- ES6 let聲名變數總結變數
- ES6中let和var和const的區別
- 【ES6】var、let、const三者的區別
- ES6 部分總結
- ES6系列——let和const深入理解
- ES6之—讀懂let才能少踩坑
- let & const —— ES6基礎總結(二)
- ES6 - let與const,解構賦值賦值
- ES6之---讀懂let才能少踩坑
- es6新特性--let,const關鍵字
- ES6 --- 新的變數宣告方式 let 與 const 解析變數
- 關於es6 let var const 以及Symbol的總結Symbol
- ES6學習筆記一(let和const)筆記
- 理解let並 const在JavaScript ES6中(1)JavaScript
- 理解let並 const在JavaScript ES6中(2)JavaScript
- 理解let並 const在JavaScript ES6中(4)JavaScript
- ES6標準入門之---let與const
- ES6學習筆記(一)————————————–let和const筆記
- 第二章 let和const的命令
- var與ES6中const、let宣告的變數的區別變數