function foo() { return function() { console.log(this.a) } } let obj1 = { a: 'obj1' } let obj2 = { a: 'obj2' } let bar = foo.call(obj1) bar.call(obj2) // obj2
普通的函数可以两次修改 this
function foo() { return a => { console.log(this.a) } } let obj1 = { a: 'obj1' } let obj2 = { a: 'obj2' } let bar = foo.call(obj1) bar.call(obj2) // obj1
function foo() { this.a = 'obj' return a => { console.log(this.a) } } let obj1 = { a: 'obj1' } let obj2 = { a: 'obj2' } let bar = foo.call(obj1) bar.call(obj2) // obj
使用箭头函数时, this 一旦被绑定,就不能修改 this 的指向。箭头函数会继承外层函数调用的 this 绑定。