对象方法里调用另一个与全局函数重名的方法,结果是调用全局函数?

78 阅读1分钟
  var name = "windowsName";

  function fn() {
    var name = "Cherry";
    innerFunction();
    function innerFunction() {
      console.log(111);
      console.log(this.name);
    }
  }

  var a = {
    name: "objA",
    fn: function () {
      console.log(222);
      console.log(this.name);
    },
    fn2: function () {
      console.log(this.name); //objA
      fn();
      //输出111 windowsName 这里的fn找的是全局函数fn,而不是a对象里的方法fn??
    },
  };

  a.fn2();`
  

如题,对象方法里调用另一个与全局函数重名的方法,结果是调用全局函数,请问是什么原因呢?首先在 a.fn2() 中,this是对象a,那么为什么不去找对象a中的方法呢?

不知道以下理解是不是正确 - 如果函数前没有调用的对象,也没有通过call apply bind改变this指向,那么就指向window?

萌新求指教~🙏