this
指的是函数运行时所在的环境。对于obj.foo()
来说,foo
运行在obj
环境,所以this
指向obj
;对于foo()
来说,foo
运行在全局环境,所以this
指向全局环境。所以,两者的运行结果不一样。obj.foo()
就是在obj
环境执行,而一旦var foo = obj.foo
,foo()
就变成在全局环境执行?obj.foo()
是通过obj找到foo,所以就是在obj环境执行。一旦var foo = obj.foo
,变量foo就直接指向函数的地址,所以foo()就变成在全局环境执行。