gpt4 book ai didi

javascript - javascript 中的 var 提升问题及其输出

转载 作者:行者123 更新时间:2023-12-05 02:29:48 25 4
gpt4 key购买 nike

我只是想知道为什么第三个 console.log 的输出是 2?我知道 var 语句被提升(没有它们的值初始化)到它所属的全局或函数范围的顶部,即使它在 with 或 catch block 中也是如此。我目前仍在研究 javascript,没有人能正确地向我解释,因为我期望最后 2 个 console.log 的值是未定义的。为什么第二个 console.log 未定义而最后一个 console.log 输出为 2?为什么最后一个能够在 catch block 中访问 y 的值?

(function () {
try {
throw new Error();
} catch (x) {
var x = 1, y = 2;
console.log(x);
}
console.log(x);
console.log(y);
})();

最佳答案

x,y 都已提升。 var 是函数范围的,因此它们将在 block 顶部没有初始化的情况下被提升。

  (function () {
var x,y;
try {
throw new Error();
} catch (x) {
x = 1;
y = 2;
console.log(x);
}
console.log(x);
console.log(y);
})();

由于 catch(x),您在 catch block 中有一个局部变量。当您在 catch block 中执行 x=1 时,您只是在更改本地 x 的值(作为参数的值)捕获 block )。内部 x 隐藏外部 x。外部 x 仍然是 undefined。更新 y 将更新外部的,从而更新您的输出。

关于javascript - javascript 中的 var 提升问题及其输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72052580/

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