function fun() {
return () => {
return () => {
return () => {
console.log(this.name)
}
}
}
}
var f = fun.call({ name: 'foo' })
var t1 = f.call({ name: 'bar' })()()
var t2 = f().call({ name: 'baz' })()
var t3 = f()().call({ name: 'qux' })
是否可以理解为在执行var f = fun.call({ name: 'foo' })
的时候,就已经是绑定了 { name: 'foo' },此后不会再改变
fun()
内部的调用都是箭头函数,箭头函数没有自己的 this 上下文,所用的都是fun
的 this 上下文。fun
的 this 由其调用决定:fun.call(fun.call({ name: 'foo' })
给了fun
一个this
是{ name: "foo" }
,而且它并不是调用完就丢了,是存到了f
里。不过f
是一个箭头函数,用的fun
调用时确定的this
,即{ name: "foo" }
。剩下的都是基于
f
的箭头函数调用,都是同一个this
,即{ name: "foo" }
。参阅:JavaScript 的 this 指向问题深度解析 - 边城客栈 - SegmentFault 思否