箭头函数this指向的问题

function foo() {
  setTimeout(() => {
    console.log('id:', this.id);
  }, 100);
}

var id = 21;

foo.call({ id: 42 });
// id: 42

箭头函数内部的this是指向定义时所在的对象,不是执行时所在的对象。按照这个道理的话,setTimeout内部的函数不管是不是箭头函数应该都是指向window啊。定义的时候,内部的this不应该指向window,执行的时候才是指向调用的对象{ id: 42 }吗?求教

阅读 1k
评论
    17 个回答
    • 3.7k

    this不是window,而是{id:42},function的this不是window,foo.call的第一个参数就是foo函数里面的this.

    function foo() {
    var x=this;
    setTimeout(() => {

    var y=this;
    console.log('id:', this.id);

    }, 100);
    }

    定义时的this,指的是x和y都是指向同一个this,显然x是{id:42},所以y也是。

      相似问题
      推荐文章