this 是在調用 時被綁定的,徹底取決於函數的調用位置(也就是函數的調用方法)。 app
根據優先級來判斷函數在某個調用位置應用的是哪條規則。按照下面的順序來進行判斷:函數
函數是否在new中調用(new綁定)?若是是的話this綁定的是新建立的對象。this
var bar = new foo()
函數是否經過call、apply(顯式綁定)或者硬綁定調用?若是是的話,this綁定的是 指定的對象。對象
var bar = foo.call(obj2)
函數是否在某個上下文對象中調用(隱式綁定)?若是是的話,this 綁定的是那個上 下文對象。it
var bar = obj1.foo()
若是都不是的話,使用默認綁定。若是在嚴格模式下,就綁定到undefined,不然綁定到 全局對象。io
var bar = foo()