【发布时间】:2017-04-17 20:39:01
【问题描述】:
我首先说我知道使用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 内而不是在全局范围内创建。
【问题讨论】:
标签: javascript scope lexical-scope