前言
昨天看nodejs很有感触,所以就写了nodejs的文章,抱歉,今天接着之前的部分,我们之前谈到this的四种绑定规则和他们的优先级,但是既然是规则,总有规则的例外,这一章我们就来谈谈this的绑定规则的例外
正文
被忽略的this
如果你把 null 或者 undefined 作为 this 的绑定对象传入 call、apply 或者 bind,这些值在调用时会被忽略,实际应用的是默认绑定规则
一种非常常见的做法是使用 apply(…) 来“展开”一个数组,并当作参数传入一个函数。类似地,bind(…) 可以对参数进行柯里化(预先设置一些参数),这种方法有时非常有用:
间接引用
赋值表达式 p.foo = o.foo 的返回值是目标函数的引用,因此调用位置是 foo() 而不是p.foo() 或者 o.foo()。根据我们之前说过的,这里会应用默认绑定。注意:对于默认绑定来说,决定 this 绑定对象的并不是调用位置是否处于严格模式,而是函数体是否处于严格模式。如果函数体处于严格模式,this 会被绑定到 undefined,否则this 会被绑定到全局对象。
箭头函数
之前的文章中,我们一直反复强调除箭头函数以外,箭头函数并不是使用 function 关键字定义的,而是使用被称为“胖箭头”的操作符 => 定义的。箭头函数不使用 this 的四种标准规则,而是根据外层(函数或者全局)作用域来决定 this。
小结
到这里我们this就已经全部讲完了,最后我们回忆一下,this有四种绑定规则,默认绑定,隐式绑定,显式绑定,和new绑定,优先级不用说了吧,在不考虑箭头函数的情况下,this指向调用者,有一点很重要的注意哈,js是一门以词法作用域为规则的语言,所以作用域永远以定义的为准,不要被调用的位置影响了思路