質問: function() { alert('hello!'); }; func.apply(); vs func.call();前述の2つの方法にはパフォーマンスの違いがありますか? callよりapplyを使用するのが最善の場合、またその逆の場合はいつですか。
回答: mdnドキュメントのfunction.prototype.apply() から: apply()メソッドは、指定されたthis値と、配列(または配列に似たオブジェクト)として与えられた引数を使って関数を呼び出します。 構文 fun.apply(thisarg, [argsarray]) mdnのドキュメントのfunction.prototype.call() から: call()メソッドは、指定されたthis値と引数を個別に指定して関数を呼び出します。 構文 fun.call(thisarg[, arg1[, arg2[, ...]]]) javascriptの function.applyおよびfunction.callから : apply()メソッドが2番目のパラメータとして配列を必要とすることを除いて、apply()メソッドはcall()と同じです。配列は、ターゲットメソッドの引数を表します。 コード例: var dosomething = function() { var arr = []; for(i in arguments) { if(typeof this[arguments[i]] !== 'undefined') { arr.push(this[arguments[i]]); } } return arr; } var output = function(position, obj) { document.body.innerhtml += '<h3>output ' + position + '</h3>' + json.stringify(obj) + '\n<br>\n<br><hr>'; } output(1, dosomething( 'one', 'two', 'two', 'one' )); output(2, dosomething.apply({one : 'steven', two : 'jane'}, [ 'one', 'two', 'two', 'one' ])); output(3, dosomething.call({one : 'steven', two : 'jane'}, 'one', 'two', 'two', 'one' )); this fiddle も参照してください。