关于javascript中clousure的面试测试?

关于javascript中clousure的面试测试?,javascript,closures,Javascript,Closures,这是一个面试问题!我也不知道为什么 功能乐趣(val){ 这个.x=val; 归还这个; } var x=乐趣(1); 变量y=乐趣(2); 控制台日志(x.x)//我不能理解这个结果。 控制台日志(y.x)好吧,我认为这是因为fun函数中的“This”指的是窗口对象,而不是函数中的本地对象。因此,你首先用fun(1)来调用它,使窗口为.x=1,然后用fun(2)来调用它,它就变成了window.x=2。。然后,当x和y都是对窗口的引用时,您将控制台记录它。。。因此,两者都将具有相同的最终值。

这是一个面试问题!我也不知道为什么

功能乐趣(val){
这个.x=val;
归还这个;
}
var x=乐趣(1);
变量y=乐趣(2);
控制台日志(x.x)//我不能理解这个结果。

控制台日志(y.x)好吧,我认为这是因为fun函数中的“This”指的是窗口对象,而不是函数中的本地对象。因此,你首先用fun(1)来调用它,使窗口为.x=1,然后用fun(2)来调用它,它就变成了window.x=2。。然后,当x和y都是对窗口的引用时,您将控制台记录它。。。因此,两者都将具有相同的最终值。

当您以“正常”方式调用函数时,
对象指向全局对象(
窗口
):

function testFunction(){
归还这个;
}

log(window==testFunction())
函数
fun
中的此
指的是
窗口
。这与闭包无关@Bergi我同意,更多的是使用
this
关键字。该代码既不能在严格模式下工作,也不能在本地(例如模块)范围内工作。这是可怕的代码。