什么对象是在本地定义的函数范围内的变量?

时间:2017-11-16 16:22:12

标签: javascript

所以在下面的代码中,定义了什么对象y?输出为三,如下所示;当然var y是局部作用域的,所以我认为变量y的作用域是对象sx。但仍然给了我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();

2 个答案:

答案 0 :(得分:3)

您可以这样想 - 每次调用函数时,都会创建一个包含函数的所有局部变量的新匿名对象。

当你说s.x时,它引用函数s(它也是它自己的对象),但不引用前一段中的匿名对象。注意如何只有一个{ {1}}函数,但每次都可以调用它,每次创建一个新的匿名对象。

以下是您的代码在幕后实际看起来的样子:

s

*)好吧,在某种程度上......

答案 1 :(得分:2)

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({}); 范围内声明的

y。它与任何对象无关。 function xs相同。它指的是一个功能。函数是可调用对象,可以通过xs.y分配自己的属性,但是通过x.yvar, const, let在其中声明的所有内容与其对象本身无关,但这是背景。所以function是一个简单的变量,只是在y的上下文中。