1、函数是否在new中调用,即new绑定,如果是,this绑定的是新创建的对象。
2、函数是否通过call、apply调用,或者使用了bind,即硬绑定,如果是,那么this绑定的就是指定的对象。
3、函数是否在某个上下文对象中调用(隐式绑定),如果是,this绑定的是那个上下文对象。
4、如果以上都不是,那么使用默认绑定。如果在严格模式下,则绑定到undefined,否则绑定到全局对象。
5、如果Null或undefined作为this的绑定对象传入call、aplly或bind,这些值在调用时会被忽略,实际应用的是默认绑定规则。
6、如果是剪头函数,剪头函数的this继承的是外层代码块的this。