首页 > web前端 > js教程 > 为什么 JavaScript 中 `let` 和 `const` 似乎没有被提升?

为什么 JavaScript 中 `let` 和 `const` 似乎没有被提升?

DDD
发布: 2025-01-03 02:29:40
原创
331 人浏览过

Why Do `let` and `const` Seem Not to Be Hoisted in JavaScript?

使用 let 或 const 声明的变量的提升

在 ES6 中,使用 let 或 const 声明的变量与 var 相比似乎表现出不一致的提升行为。

提升的神话

首先,重要的是要澄清这一点JavaScript 中的所有声明 都会被提升,包括那些使用 let、const、var、function、function* 和 class 的声明。这意味着所有这些声明在它们定义的范围内都是可见的。

与 let 和 const 的区别

关键区别不在于提升,而在于初始化 let 和 const变量。

  • var/function/function*: 当在作用域顶部创建绑定时,这些声明将使用 undefined 或函数本身进行初始化。
  • let/const/class: 这些声明保持未初始化直到声明它们定义的地方就会被执行。

声明和初始化之间的时间间隙造成了关于提升的误解。

时间死区

对于 let 和 const变量的声明和初始化之间的时间段称为临时死区。在此期间,访问变量会导致引用错误。

示例

x = y = "global";
(function() {
    console.log(x); // undefined
    console.log(y); // Reference error: y is not defined

    var x = "local";
    let y = "local";
}());
登录后复制

在此示例中,var 和 let 变量 x 和 y 在函数作用域的顶部声明。然而,let 变量 y 直到稍后才初始化,从而创建了一个临时死区,在该死区中访问 y 会引发错误。

结论

虽然 JavaScript 中的所有声明都被提升,但 let 和 const 变量表现出不同的初始化行为。这种行为会导致“没有被提升”的感觉,但实际上是由于后期初始化创建的暂时死区造成的。 let 和 const 变量在提升方面的工作方式相同。

以上是为什么 JavaScript 中 `let` 和 `const` 似乎没有被提升?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板