Javascript 为什么“this”指向object

Javascript 为什么“this”指向object,javascript,node.js,ecmascript-5,Javascript,Node.js,Ecmascript 5,在下面的代码中,为什么test函数的第二个this指向obj,而第一个this指向窗口对象 特别是,如何通过查看一段代码来猜出this的值 var测试=函数(){ log('first',this) 返回函数(){ console.log('second',this) } } var obj={ 答:1,, b:测试() } obj.b()//执行函数 在对象创建时调用test,触发第一次日志记录,并将创建的函数存储到对象中。您在全局级别调用该函数,因此在该范围内可以解决此问题 这是一个面试问题

在下面的代码中,为什么
test
函数的
第二个this
指向
obj
,而
第一个this
指向
窗口
对象

特别是,如何通过查看一段代码来猜出
this
的值

var测试=函数(){
log('first',this)
返回函数(){
console.log('second',this)
}
}
var obj={
答:1,,
b:测试()
}
obj.b()//执行函数

在对象创建时调用test,触发第一次日志记录,并将创建的函数存储到对象中。您在全局级别调用该函数,因此在该范围内可以解决此问题

这是一个面试问题吗? 你想达到/理解什么

编辑: 有关“此”的详细说明,请参阅本指南:

无需猜测-使用
test()
作为裸函数调用-
此===window
,但是使用
test
返回的函数作为
obj
的属性调用-
此===obj
执行
test()
时,它在全局上下文中,并且您在非严格模式下运行,因此
窗口
被分配给
。当您通过
obj.b()
调用内部函数时,
obj
被分配给
this
的值在调用时确定:作为一个简单的经验法则,
将具有执行时点之前的最后一个值,因此使用
obj.b
->
obj
。如果您有
obj1.obj2.obj3.prop()
->
obj1.obj2.obj3
。如果没有点,只需调用
test()
,那么它就是全局对象或
未定义的对象(取决于严格/非严格模式)。