JavaScript return函数中的this指向问题

题目描述

以下代码:
var name = "林二二";

var obj = {
  name: "林一一",
  fn: function () {
    var name = "小三";
    return function () {
      return this.name;
    };
  },
};
console.log(obj.fn()()); // 林二二

为什么输出是全局的name?

自己的思路

上面代码之所以输出全局下的name,是因为this指向了window
但是为什么它会指向window?
this不是应该指向调用它的调用者吗?
原因是因为它是匿名函数还是和‘return’的机制有关?

阅读 3.8k
2 个回答

obj.fn()()obj.fn()是不一样的,obj.fn()可以理解为obj调用它的fn函数,此时fn的调用者是obj,所以fn里的this指向obj,那么obj.fn()()呢,这是obj.fn()先返回一个函数,然后这个函数再调用,此时这个函数相当于是无主的,里面的this在非严格模式下指向window,严格模式下是undefined

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题