var name = "the window";
var object = {
name:"my object";
getName:function(){
return this.name;
}
};
object.getName(); //"my object"
(object.getName)(); //"my object"
(object.getName=object.getName)(); //"the window"
第二和第三个输出为什么不一样,尤其是第三个,怎么理解?
函数里的 this 取决于你调用它时的上下文。
当函数作为对象的方法调用时,this 指向这个对象。
当你直接执行它时,this 指向 window。
你还可以用
call
,applay
,bind
方法来指定this
。下面有一段示例帮助你理解:
题目里的
(object.getName=object.getName)();
这种写法有意思的地方在于,object.getName=object.getName
这个赋值操作的返回结果是下面这个函数体,所以整个这一句的执行结果等同于
结合此答案最前面提到的第 2 点,可知这里的
this
就指向window
。其实这个问题跟闭包无关,跟上下文(context)有关。闭包影响作用域,上下文影响
this
。