JavaScript变量提升指声明被移至作用域顶部:var声明与初始化为undefined一同提升;let/const仅声明提升,访问触发TDZ错误;函数声明完整提升可提前调用,函数表达式不提升。

JavaScript 的 hoisting(变量提升)是指在代码执行前,JavaScript 引擎会把 变量声明 和 函数声明 “提升”到当前作用域顶部的行为。注意:只有声明被提升,赋值不会被提升。
用 var 声明的变量,其声明会被提升到作用域顶部,并自动初始化为 undefined。所以你可以在声明前访问它,但值是 undefined,不会报错。
console.log(a); // undefinedvar a = 10;这等价于:
var a; // 提升并初始化为 undefinedconsole.log(a); // undefineda = 10; // 赋值不提升let 和 const 的声明会被提升,但不会被初始化。在声明语句执行前访问它们,会抛出 ReferenceError,这段区域就叫“暂时性死区”(Temporal Dead Zone)。
立即学习“Java免费学习笔记(深入)”;
console.log(b); // ReferenceError: Cannot access 'b' before initializationlet b = 20;这是为了防止意外使用未初始化的变量,增强代码安全性。
函数声明(不是函数表达式)会被完整提升:声明和函数体都移到顶部,因此可以在定义前调用。
foo(); // 正常输出 "hello"function foo() { console.log("hello"); }但函数表达式不会被提升(只有 var 声明部分提升,赋值不提升):
bar(); // TypeError: bar is not a functionvar bar = function() { console.log("world"); };提升只发生在当前作用域内(全局或函数内),块级作用域(如 if 或 {})对 var 无效,但对 let/const 有效。不过要注意:var 没有块级作用域,所以:
if (false) { var x = 1; }console.log(x); // undefined(x 已声明,但未赋值)而 let x 在块外访问直接报错,因为它根本没进入外部作用域。
基本上就这些。理解 hoisting 不是为了写出“先用后声明”的代码,而是避免因误解导致的意外行为。现代实践推荐优先使用 let 和 const,减少 var,让提升带来的模糊性降到最低。
以上就是javascript的hoisting是什么_它如何影响变量声明?的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号