Function.call vs Function.apply

callapply 都是 Function.prototype 的方法,是 JavaScript 引擎內在就實現了,也就是說所有的 Function 實體,都有 call 和 apply 方法。

區別它們的差異可以簡單的用一段程式碼理解:

this.fun(arg1, arg2) == fun.call(this, arg1, arg2) == fun.apply(this, arguments)

其實你應該已經發現有差嗎? call 和 apply 只有差在傳遞參數的方式不同而已

語法

// fun.call
someMethod.call(thisArg[, arg1[, arg2[, ...]]])

// fun.apply
someMethod.apply(thisArg, [argsArray])
  • thisArg: 呼叫 someMethod 傳進去當作 this 的值。

非嚴格模式 (non-strict mode),如果你傳進去的 thisArg 為 null or undefined,則 this 值將指到 全域變數

Reference