gpt4 book ai didi

javascript - With block 中的变量声明

转载 作者:行者123 更新时间:2023-11-28 18:01:31 26 4
gpt4 key购买 nike

我在开头说我知道强烈建议不要使用 with,而且我也不打算使用它。我只是想了解它是如何工作的(我试图找出 javascript 的范围)。

如果我有这样的代码:

function foo(obj) {
with (obj) {
b = 2;
}
}

var o1 = {
a: "something"
};

foo( o1 );
console.log(o1.b) // This outputs undefined (makes sense)
console.log(b) // This outputs 2 (makes sense)

但是,如果我将 foo 更改为如下所示:

function foo(obj) {
with (obj) {
var b = 2; // I use var b instead of b
}
}

当我将 o1 传递给 foo 时,o1 再次没有属性 b。为什么是这样?我认为使用 var 会在 obj 的范围内声明 b,因此该属性将在 o1 内部而不是在全局范围内创建。

最佳答案

var 声明被提升。所以你正在执行的相当于

function foo(obj) {
var b;
with (obj) {
b = 2;
}
}

声明位于 with block 内并不重要。 §9.2.12描述了函数体被求值时发生的情况。在步骤 11/12 中,收集所有变量声明。 with 语句只是“转发”其中的所有声明 ( see spec )。

关于javascript - With block 中的变量声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43459213/

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