js中的函數對象有定義時上下文,運行時上下文,上下文是可以改變的 這些概念。
舉個例子
function a(c){
alert(c)
alert(this.b)
}
d={b:'哈哈'}
//如果直接運行a();那麼a函數是用window調用的,裏面的this指window,window對象當然沒有b屬性了,但是下面的函數將a函數運行時的上下文替換成了d對象,也就是d對象調用a函數,那麼this就指代d對象,後面是傳入的參數。
a.call(d,‘嘿嘿’);
call和apply的唯一不同就在於,call是按照順序進行傳參,而apply要將參數封裝成一個數組進行傳參,所以當參數個數不定時,要用apply