call 和 apply 的區別

2021-10-06 13:57:32 字數 858 閱讀 3341

相同點:都是為了改變this的指向

不同點:傳參的類別不同

call 第二個引數開始接受乙個引數列表

tostring.call(,1,2,3);
let array = [1,2,3], obj = {};

function fun(a,b,c){}

//a = 1,b = 2,c = 3

//a = [1,2,3] b = c = undefined

fun.call(obj,array);

//es6的展開運算子,這時a = 1,b = 2,c = 3

fun.call(obj,...array);

類似功能的方法還有乙個 bind ,但是 bind 沒有把函式立即執行,而是預先處理改變this

哪個效能會好一點

效能測試,很多任務具都可以測出一段**的效能和效果

自己也可以簡單的測試一下效能,但是因為cpu、記憶體等電腦當前效能不會一直不變,所以測出來的效能會有差別。

如果想要測試一段**的執行時間

1. 可以在**執行之前獲取一下當前之間,執行之後獲取乙個時間,兩者相減得到執行**的時間

2.console 有個方法,console.time()可以監控時間,

console.time('ti');

// 想要測時間的**

console.timeend('ti');

3. 在火狐瀏覽器上可以先安裝firebug,使用console.profile(),可以更精準的獲取當前時間

call 和apply 的區別

call方法 語法 call thisobj,object 定義 呼叫乙個物件的乙個方法,以另乙個物件替換當前物件 說明 call方法可以用來代替另乙個物件呼叫乙個方法。call方法可將乙個函式的物件上下文從初始的上下文改變為由thisobjext指定的新物件。如果沒有提供thisobj引數,那麼g...

call和apply的區別

1 方法定義 call方法 語法 call thisobj arg1 arg2 argn 定義 呼叫乙個物件的乙個方法,以另乙個物件替換當前物件。說明 call 方法可以用來代替另乙個物件呼叫乙個方法。call 方法可將乙個函式的物件上下文從初始的上下文改變為由 thisobj 指定的新物件。如果沒...

call和apply的區別

如下 複製 function add a,b function reduce a,b add.call reduce,1,3 將add方法運用到reduce,結果為4 如下例 如下 複製 function b b window b.call window b.call a 2,3 a 再看乙個複雜的...