1、call 和 apply 都是 function 類 原型上的方法;每一個函數作為 function 的實例都能調用這兩個方法;這兩個方法執行的目的都是用來改變函數中 this 指向的,讓函數執行並且能改變函數中 this 指向。
2、區別:call 傳參的時候要求我們給函數傳參是一個個傳的,而 apply 的要傳的參數是以一個數組保存起來;
3、一樣改變 this 的還有 bind,bind並沒有立即執行函數,只是預先把處理改變函數中的 this
4、call 的性能要比 apply 好一些(尤其是傳遞給函數的參數超過三個的時候)
let arr = [10, 20, 30],
obj = { }
function fn (x, y, z) { }
fn.apply (obj, arr);
fn.call (obj, ...arr); =》基於 ES6 的展開運算符也可以實現把數組中的每一項一次傳遞給函數