对箭头函数使用 bind这类函数是无效的
不管我们给函数 bind 几次,fn 中的 this 永远由第一次 bind 决定,所以结果永远是 window
let a = {} let fn = function () { console.log(this) } fn.bind().bind(a)() // => ?
// fn.bind().bind(a) 等于
let fn2 = function fn1() { return function() { return fn.apply() }.apply(a) } fn2()
多种规则优先级
首先,new 的方式优先级最高,接下来是 bind 这些函数,然后是 obj.foo() 这种调用方式,最后是 foo全局调用 这种调用方式,同时,箭头函数的 this 一旦被绑定,就不会再被任何方式所改变。