let 關鍵字建立變數時,只將註冊提公升,初始化和賦值階段並未提公升,在初始化之前是不可被訪問的(稱為"暫時死區(temporal dead zone,簡稱 tdz)")。當嘗試訪問變數時,會丟擲 referenceerror 錯誤
console.
log(a)
// 輸出 undefined
var a =
2 console.
log(b)
// 報錯 uncaught referenceerror: cannot access 'b' before initialization
暫時性死區的作用範圍:
console.
log(a)
// uncaught referenceerror: a is not defined
通過報錯可以看出,暫時性死區範圍在 let 所在的塊級作用域的頂部,直到 let 宣告變數之前 let暫時性死區
只要塊級作用域內存在let命令,他所宣告的變數就繫結這個區域,不再受外部的影響。var tmp 123 if true tmp abc let tmp 丟擲錯誤 referenceerror 上面 中,存在全域性變數tmp,但是塊級作用域內let又宣告了乙個區域性變數tmp,導致後者繫結這個塊級作用...
JS的暫時性死區問題
1.基於let建立變數,會把大部分 當作乙個私有的塊級作用域 類似於函式的私有作用域 在這裡也是重新檢測語法規範,看一下是否是基於新語法建立的變數,如果是按照新語法規範來解析 2.console.log a uncaught referencerrror a is not defined conso...
ES6 中的 TDZ(暫時性死區)
temporal dead zone tdz 是 es6 es2015 中對作用域新的專用語義。在 es6 之前,js 的 scope 只有兩種,全域性作用域和函式作用域,在 es6 種出現了塊級作用域,即使用 let const 可以定義塊級作用域 let const 是使用區塊作用域 var 是...