gpt4 book ai didi

Javascript:如何在 if block 内提升(或不提升)let?

转载 作者:行者123 更新时间:2023-11-30 11:27:07 25 4
gpt4 key购买 nike

<分区>

在我看来,我已经理解了 JavaScript 作用域和提升的基本概念。这question+answer在这方面帮了我很多。

不过,最近我遇到了一些让我有点吃惊的事情。考虑以下代码:

var a = 1;

if (true) {
console.log(a);
let a = 2;
}

console.log(a);

根据我所学,我希望它输出 undefined1。尽管它会导致 Uncaught ReferenceError: a is not defined

我的理解是,上面的代码应该等价于(作为 let a = 2; 的声明部分应该被提升到最近的封闭 block ——即 if ,在这种情况下):

var a = 1;

if (true) {
let a;
console.log(a);
a = 2;
}

console.log(a);

顺便说一下,这段代码会产生 undefined1,正如我所期望的那样。


我的问题是:

  • let 声明的变量是否在最近的封闭 block 内被提升?
    • 如果是,为什么第一个 block 中的代码会导致Uncaught ReferenceError: a is not defined

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com