所以在下面的代码中,y
定义在什么对象上?它输出到三个,如下所示;当然 var y 是局部范围的,所以我认为变量 y 的范围是对象 s
或 x
。但仍然给我 undefined
.. 我知道 alert(y)
会给我三个,但这不是我的问题。我想知道它是在什么对象上定义的,如果它在像下面的代码这样的函数中是局部作用域的。
var s = function x() {
var y = 3;
alert(y); // y is defined on what object? //results 3
alert(window.y); //local scope so obviously this won't be true
alert(s.y); //undefined? why //expected 3
alert(x.y); //undefined? why //expexted 3
}
s();
最佳答案
您可以这样想 - 每次调用函数时,都会创建一个新的匿名对象,其中包含该函数的所有局部变量。
当你说 s.x
时,它指的是函数 s
(这也是它自己的对象),而不是上一段中的匿名对象。注意如何只有一个 s
函数,但它可以被调用多次,每次都创建一个新的匿名对象。
这是您的代码在幕后的实际样子*:
var s = function x(_ctx) {
_ctx.y = 3;
alert(_ctx.y); // locals are looked up in _ctx
alert(window.y); //
alert(s.y); // not looking in _ctx, but in s
alert(x.y); // ditto, as x === s
}
s({});
*) 好吧,在某种程度上..
关于javascript - 在哪些对象上定义函数的局部范围内的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47334532/