关于箭头函数中的this
箭头函数并不是通过使用function关键字来定义的,而是通过操作符=>定义的,他是根据外层(函数或者全局)作用域来决定this的。
样例
function foo(){
return (a)=>{
//this 继承自foo()
console.log(this.a)
}
}
var obj1={
a:2
};
var obj2={
a:3
}
var bar=foo.call(obj1);
bar.call(obj2); //2
foo()内部创建的箭头函数会捕获调用时的foo()的this。由于foo()的this绑定在obj1上(bar=foo.call(obj1);),此时bar(引用的是箭头函数)的this也会绑定在obj1,箭头函数的this是无法修改的。
适用场景
定时器
function foo(){
var a=1;
setTimeout(()=>{
//这里的this在词法上继承自foo();
console.log(this.a)
})
}