变量提升指JavaScript引擎在编译阶段将声明“记入”作用域顶部,并非真实移动代码;var声明被提升并初始化为undefined,let/const仅提升不初始化而存在TDZ,函数声明整体提升,函数表达式仅变量名提升。

变量提升(Hoisting)是 JavaScript 中一个容易让人困惑的概念,它指的是变量和函数声明在代码执行前被“移动”到当前作用域顶部的现象。注意:不是真的移动代码,而是 JavaScript 引擎在编译阶段就记住了这些声明,让它们在作用域内“看起来”像是提前存在了。
var 声明会被提升并初始化为 undefined
用 var 声明的变量,声明会被提升,同时会被自动赋值为 undefined。所以你可以在声明之前访问它,不会报错,但值是 undefined。
- console.log(a); // undefined
- var a = 10;
这等价于:
- var a; // 提升并初始化为 undefined
- console.log(a); // undefined
- a = 10; // 赋值不提升
let 和 const 声明只提升不初始化(存在暂时性死区)
let 和 const 声明也会被提升,但不会被初始化。在声明语句执行前访问它们,会直接抛出 ReferenceError,这个区域叫“暂时性死区”(Temporal Dead Zone, TDZ)。
立即学习“Java免费学习笔记(深入)”;
标签: javascript java access 作用域
还木有评论哦,快来抢沙发吧~