Javascript 心灵扭曲暗示了这个.var访问 输出:
请解释为什么此代码只打印一次Javascript 心灵扭曲暗示了这个.var访问 输出:,javascript,Javascript,请解释为什么此代码只打印一次错误,然后再打印酷 为什么v1没有这个首先会起作用呢?第二次调用f1()没有bind()-其中这个隐式地是窗口,分配全局变量v1(或窗口.v1)到'cool',这是之后打印的值。首先,您记录的不是这个.v1,而是v1。这是对应该在窗口上定义的全局v1变量的引用。每次登录时不是x.v1,而是window.v1 此在没有限定范围的函数中指的是全局窗口。所以当你第一次调用它时,v1是在x上创建的,但是当你第二次调用它时,它是在窗口中创建的 为什么不使用这个关键字就可以使用v
错误
,然后再打印酷
为什么
v1
没有这个
首先会起作用呢?第二次调用f1()
没有bind()
-其中这个
隐式地是窗口
,分配全局变量v1
(或窗口.v1
)到'cool'
,这是之后打印的值。首先,您记录的不是这个.v1
,而是v1
。这是对应该在窗口
上定义的全局v1
变量的引用。每次登录时不是x.v1
,而是window.v1
此
在没有限定范围的函数中指的是全局窗口
。所以当你第一次调用它时,v1
是在x
上创建的,但是当你第二次调用它时,它是在窗口中创建的
为什么不使用这个关键字就可以使用v1
因为您的“this”关键字将绑定到“window”对象,这是特殊的。
对于窗口,变量对象与其“this”对象/上下文相同
简单地说,window对象上的变量和属性是相同的
下面是来自ECMA-262的示例
error
v1: cool
v1: cool
v1: cool
因为在对f1的第二次调用中,此
等于窗口
或全局对象,因此现在v1
是一个全局变量
error
v1: cool
v1: cool
v1: cool
var a = new String('test');
alert(a); // directly, is found in VO(globalContext): "test"
alert(window['a']); // indirectly via global === VO(globalContext): "test"
alert(a === this.a); // true
var aKey = 'a';
alert(window[aKey]); // indirectly, with dynamic property name: "test"