JS的暫時性死區問題

2021-10-23 20:07:23 字數 377 閱讀 8216

1.基於let建立變數,會把大部分{}當作乙個私有的塊級作用域(類似於函式的私有作用域),在這裡也是重新檢測語法規範,看一下是否是基於新語法建立的變數,如果是按照新語法規範來解析

2.console.log(a); //uncaught referencerrror: a is not defined

console.log(typeof a); // =>"undefined"在原有瀏覽器渲染機制下,基於typeof等邏輯運算子檢測乙個未被宣告過的變數,不會報錯,返回undefined

=>可以理解為是瀏覽器處理的乙個死區

es6中用let建立的變數走新語法規範,在沒有宣告這個變數的時候,使用typeof檢測會直接報錯,不會是undefined,解決了上面說的暫時性死區問題

暫時性死區

let 關鍵字建立變數時,只將註冊提公升,初始化和賦值階段並未提公升,在初始化之前是不可被訪問的 稱為 暫時死區 temporal dead zone,簡稱 tdz 當嘗試訪問變數時,會丟擲 referenceerror 錯誤 console.log a 輸出 undefined var a 2 c...

let暫時性死區

只要塊級作用域內存在let命令,他所宣告的變數就繫結這個區域,不再受外部的影響。var tmp 123 if true tmp abc let tmp 丟擲錯誤 referenceerror 上面 中,存在全域性變數tmp,但是塊級作用域內let又宣告了乙個區域性變數tmp,導致後者繫結這個塊級作用...

ES6 中的 TDZ(暫時性死區)

temporal dead zone tdz 是 es6 es2015 中對作用域新的專用語義。在 es6 之前,js 的 scope 只有兩種,全域性作用域和函式作用域,在 es6 種出現了塊級作用域,即使用 let const 可以定義塊級作用域 let const 是使用區塊作用域 var 是...