我的前言说我知道使用with
是非常不鼓励,我也不打算使用它。我只是想知道它是如何工作的(我试图找出javascript中的范围)。变量声明在一个With块
如果我有一些像这样的代码:
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)
但是,如果我改变富来是这样的:
function foo(obj) {
with (obj) {
var b = 2; // I use var b instead of b
}
}
当我通过O1为foo,再次,O1没有属性b。为什么是这样?我认为使用var
会在obj的范围内声明b,所以该属性将在o1中而不是在全局范围内创建。