箭头函数this的指向问题

var o = {
    b: () => {
        console.log('this is', this);
    }
}

o.b();

为什么this指向了window?
我看的答案基本都是这样答的
箭头函数this是指向上级,o定义在全局中所有this指向window

var a = {
    o:{
        b: () => {
            console.log('this is', this);
        }
    }
}

a.o.b();

为什么this还是指向了window?

阅读 4.1k
5 个回答

是个比较笼统的说法,箭头函数this是指向上级这个指的是函数作用域,是非箭头函数被function(){ } 这个{ }包裹的作用域,包裹一次就是一级顶层是window

<script>
  //this === window
  function a() {
    //this === a 1级
    function b() {
      //this === b 2级
    }
  }
</script>

还有一个指的是Object对象嵌套层级

var a = {
  //1级
  o: {
    //2级
    b: () => {
      console.log('this is', this);
    },
  },
};

你应该是把上下2个 给混淆了,区分清楚就不会有疑问了

我记得是,箭头函数所在的this 是他外面的那个非箭头函数的this 就可以了

你这个是对象 对象不构成单独的作用域 你在什么时候定义的那就指的谁 现在就指向全局
如果你觉得指向o得话 那么你在o下面定义个name 打印一下this.name是找不到得 但是通过this.a.o.name是可以得

箭头函数没有自己的this,导致他的this绑定的是定义时的this,而不是调用时的this。
你是不是觉得a.o.b,此时的this应该是a?
如果你是这样理解,其实这里不存在this,b的箭头函数里的this永远指向window
如果还不理解,请看http://es6.ruanyifeng.com/#do...

箭头函数的this指向的是定义时的this,而且箭头函数的this不能更改。
上面两个箭头函数定义时的this都是window。

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