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 }吗?求教
箭头函数没有自己的
this
, 它的this
是继承而来。默认指向在定义它时所处的对象(宿主对象),而不是执行时的对象。比如:写到这里相信你应该明白了吧~
原本
foo
的this
是window
的,后来call
之后this
指向变成{id: 42}
了。所以执行的是
foo.call({})
,而不是foo()
本身。(这里很关键!)如果此时你再去执行
foo()
,打印的还是21