箭头函数中 this
注意:箭头函数的 this 是继承父级作用域的 this,而不是指向调用者。
示例 1:
对象作用域默认父级
var a = 1
var b = {
fn: () => {
console.log(this.a)
},
a: 2
}
var c = {
a: 3
}
c.fn = b.fn
c.fn() // 1
示例 2:
函数作用域根据 return 确定
function fun() {
return () => {
return () => {
return () => {
console.log(this.name)
}
}
}
}
var f = fun.call({ name: 'foo' })
var t1 = f.call({ name: 'bar' })()() // foo
var t2 = f().call({ name: 'baz' })() // foo
var t3 = f()().call({ name: 'qux' }) // foo
var f = fun.call({name: ‘foo’})这一句 会将 this 指向{name: ‘foo’}。 var t1 = f.call({name: ‘bar’})()(),执行 f(),之后返回的都是箭头函数,所以直到最后,父级作用域上的 this 还是指向{name: ‘foo’}。打印:foo。 下面两个同样,因为 t1、t2、t3 都是箭头函数,使用 call()方法不能改变 this 指向,作用域链上最近的 this 还是指向{name:‘foo’}。