⛔cannot access 'xxx' before initialization❗️
JS ⟩ error ⟩ ReferenceError ⟩ cannot access '...' before initialization
⛔ ReferenceError:cannot access '...' before initialization❗
replit:TDZ: let/const/class
using typeof on lexical declaration (let/ const/ class) in its temporal dead zone will throw a ReferenceError.
// ⭐ temporal dead zone (start)
// ------------------------------
typeof aLet; // ⛔ ReferenceError: Cannot access 'aLet' before initialization
typeof aConst; // ⛔ ReferenceError: Cannot access 'aConst' before initialization
typeof aClass; // ⛔ ReferenceError: Cannot access 'aClass' before initialization
typeof undeclared; // ❗ 'undefined'
// ⭐ lexical declarations (let/const/class)
// --------------------------------------------
let aLet; // ⭐ initialized to `undefined`
const aConst = "hello";
class aClass {}replit:hoisting & TDZ
referring to a variable before initialization causes a runtime error.
const { log } = console;
function sayHi() {
var greeting = "Hello";
// block scope
{
// --------------------------
// ⭐️ cause runtime error❗
// --------------------------
greeting = "Howdy"; // ╮
// ^^^^^^^^ // ⭐️
// ⛔ ReferenceError: (runtime error) // Temporal
// Cannot access 'greeting' // Dead
// before initialization // Zone (TDZ)
// for `greeting`
// ╯
let greeting = "Hi"; // ⭐️ `greeting` declared here❗
log(greeting);
}
}
log('hello'); // ✅ 'hello' (this line is OK)
sayHi(); // ⛔ run-time errorlet/const/class hoisting - uninitialized variable.
initial value ⟩ 💈範例 - improper declaration.
Last updated
Was this helpful?