javascript的this指向

大家有空帮我看下这个问题哈,不胜感激

代码如下:

      var userName = "zhangsan";
      var person = {
        userName: "lisi",
        method: function () {
          return function () {
            return this.userName;
          };
        },
      };
      console.log(person.method()()); 

我的问题:

  1. 打印结果是zhangsan,person.method()()调用的是如下函数,为啥这里的this指向的是window?
          return function () {
            return this.userName;
          };

盼复

函数内部的this指向,取决于函数的调用方式。
person.method()() 执行过程等价于:
let func = person.method(); // 此时,method作为person对象方法调用,所以this指向person。
func(); // 此时func()是在全局执行环境调用的,this指向顶层对象window或global。

正在学习这个,以下是对this的理解:
JavaScript中的this是在运行时绑定的。在不同的执行上下文中,this指向是不同的:

  • 在全局上下文,this指向顶层对象(window/global)。
  • 在函数上下文,this指向取决于函数调用方式:在全局执行环境调用函数时,this指向顶层对象(window/global);作为对象方法被调用时,this指向该对象。在es5中,通过apply()、call()、bind()在运行时改变this指向,apply()、call()仅对当前调用生效,bind()是固定绑定this,且无法修改。
  • 构造函数中的this指向正在创建的对象。
  • 箭头函数中的this继承自外层词法作用域。

百度搜索 js this用法 应有尽有