一个执行函数的this绑定到哪个上下文对象?有4条基本原则,以下按照顺序来判断:
该函数使用new运算符调用?(new绑定)
如果是,this绑定到新创建的那个对象上该函数使用call 或者 apply调用?(显示绑定)
如果是,this绑定到apply或者call的第一个参数对象该函数通过它的定义对象来调用? (隐式绑定)
如果是,this绑定到它的定义对象上上述3条规则都不符合(缺省绑定)
如果是严格模式,this绑定到undefined
否则,this绑定到全局对象
为了防止无意绑定到全局对象,可以通过创建一个对象占位符来有效的保护全局对象不受污染:
var @ = Object.create(null);