[英]JavaScript performance: Call vs Apply
當params
為空數組或null
時func.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我的機器上的呼叫速度更快。
哈,有意思:看起來apply
比call
慢。 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( thisArg , argArray )
- 如果IsCallable ( func )為false,則拋出TypeError異常。
- 如果argArray為null或未定義 ,那么
- 返回調用func的[[Call]]內部方法的結果,提供thisArg作為此值和一個空的參數列表。
Function.prototype.call( thisArg [, arg1 [, arg2 ,...]])
- 如果IsCallable ( func )為false ,則拋出TypeError異常。
- 讓argList為空List 。
- 如果使用多個參數調用此方法, 則從 arg1開始以從左到右的順序將每個參數附加為argList的最后一個元素
- 返回調用func的[[Call]]內部方法的結果,提供thisArg作為此值,並將argList作為參數列表。
因此差異(如果有的話)應該依賴於實現,並且可以忽略不計。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.