看了这个的issue,
和一道这样的面试题:
你说箭头函数没有自己的this,那(()=>{}).bind(this)可?
我想对箭头函数的this指向问题做一点总结
如有错误缺漏,欢迎指出
先出结论:
箭头函数没有自己的this,而是在定义时继承来自外层函数(非箭头函数)的this
实验1
var a = 12;
()=>{
console.log(this.a);
})
// 什么都没输出
箭头函数定义时,没有找到this
实验2
var a = 12;
function wrap() {
return (()=>{
console.log(this.a);
})
}
wrap.call({a:1})()
// 输出1
wrap执行时,箭头函数才定义,因此this指{a:1}
实验3
var a = 12;
function wrap() {
return (()=>{
console.log(this.a);
})
}
wrap.call({a:1}).call({a:2})
// 输出1
call({a:2})
属于运行时绑定,因此不改变箭头函数的this
实验4
var a = 12;
function wrap() {
this.a = 3;
var fn = ()=>{
console.log(this.a);
}
fn();
}
wrap();
// 输出3
箭头函数定义时,取外层函数的this