this使用一种更优雅的方式来隐式“传递”一个对象的引用
1.this的绑定和函数声明的位置没有任何关系,只取决于函数的调用方式。
2.函数在执行过程中如何绑定this
a.默认绑定:
不被任何函数引用进行调用(全局对象)=》严格模式this会绑定到undefined
b.隐式绑定:
调用位置是否有上下文对象(缺点:隐式丢失)
c.显式绑定:
foo.call(this,2,3);//此处‘this’指显式绑定的函数对象
- call() apply()
它们第一个参数是一个对象,是给this准备的,接着在调用函数时将其绑定到this,因为可以直接指定this的绑定对象,因此称为显式绑定
如果把undefined或者null作为this的绑定对象传入call、apply或者bind,这些值在调用时会被忽略,实际应用的是默认绑定规则
优先级
1.new调用?绑定到新创建的对象
2.由call,apply(或者bind)调用?绑定到指定的对象
3.由上下文对象调用?绑定到上下文对象
4.默认:在严格模式下绑定到undefined,否则绑定到全局对象
- ES6中的箭头函数并不使用以上四条标准的绑定规则,而是根据当前的词法作用域来决定‘this’。(箭头函数会继承外层函数的this绑定)
网友评论