簡體   English   中英

JavaScript性能:調用vs Apply

[英]JavaScript performance: Call vs Apply

params為空數組或nullfunc.apply(obj, params)func.apply(obj, params)切換到func.call(obj)是否有性能優勢?

我的意思是,調用func.call(obj)比調用func.apply(obj, null)更快?

我最感興趣的是NodeJS 4.x下的性能。

這適用於必須進行大量此類調用的算法。

在這個頁面上有一個比較。 https://jsperf.com/call-apply-segu我的機器上的呼叫速度更快。

哈,有意思:看起來applycall慢。 8-)

    ~/tmp ω  cat test.js                                                                                                   
function work(a, b, c) {
  // do some work
}

var a = [1, 2, 3];

for (var j = 0; j < 4; j++) {
  console.time('apply-ing');
  for (var i = 0; i < 1000000; i++) {
    work.apply(this, a);
  }
  console.timeEnd('apply-ing');

  console.time('call-ing');
  for (var i = 0; i < 1000000; i++) {
    work.call(this, 1, 2, 3);
  }
  console.timeEnd('call-ing');
}
    ~/tmp ω  node test.js
apply-ing: 42ms
call-ing: 5ms
apply-ing: 40ms
call-ing: 5ms
apply-ing: 42ms
call-ing: 5ms
apply-ing: 39ms
call-ing: 6ms
    ~/tmp ω  node --version
v4.1.2
    ~/tmp ω

基本上,他們將采取相同的步驟:

Function.prototype.apply( thisArgargArray

  1. 如果IsCallablefunc )為false,則拋出TypeError異常。
  2. 如果argArraynull未定義 ,那么
    1. 返回調用func的[[Call]]內部方法的結果,提供thisArg作為值和一個空的參數列表。

Function.prototype.call( thisArg [, arg1 [, arg2 ,...]])

  1. 如果IsCallablefunc )為false ,則拋出TypeError異常。
  2. argList為空List
  3. 如果使用多個參數調用此方法, 則從 arg1開始以從左到右的順序將每個參數附加為argList的最后一個元素
  4. 返回調用func的[[Call]]內部方法的結果,提供thisArg作為值,並將argList作為參數列表。

因此差異(如果有的話)應該依賴於實現,並且可以忽略不計。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM