だから、私はイベントリスナーを添付するための大きな要素セットを持っているとしましょう。例えば。クリックすると各行が赤くなるようにするテーブル。javascriptでは、インライン関数を定義する際のトレードオフとリファレンスとして渡すことのトレードオフは何ですか?
私の質問は、これらの中で最も速く、メモリを最低限に抑えるものです。私はそれが(通常)トレードオフであることを理解しているので、私はそれぞれに最適なオプションを知りたいと思っています。テーブルの例を使用して
、のは、すべての行要素のリストがあります言わせて、「rowList」:
オプション1:
for(var r in rowList){
rowList[r].onclick = function(){ this.style.backgroundColor = "red" };
}
私の直感では、これが最速であるということですそれぞれの行リストには関数の独自のコピーがあり、onclick関数が大きい場合に重大になる可能性があるため、ポインターコールは少なくて済みますが、最もメモリが集中します。
オプション2:(!ああ、もう一つのポインタ参照)
function turnRed(){
this.style.backgroundColor = "red";
}
for(var r in rowList){
rowList[r].onclick = turnRed;
}
私は、これは上記のものよりもほんのteensy少し遅くなるだろう推測しているが、はるかに少ないメモリ集約ブラウザは関数の1つのコピーを追跡するだけでよいからです。
オプション3:
var turnRed = function(){
this.style.backgroundColor = "red";
}
for(var r in rowList){
rowList[r].onclick = turnRed;
}
私は、これはオプション2と同じであると仮定し、私はちょうどそこにそれをスローするようにしたかったのです。対
$('tr').click(function(){this.style.backgroundColor = "red"});
:とjqueryの
同じ質問:JavaScript differences defining a function
ボーナスセクション:これとオプション2との違いは何であるか疑問に思ったものについては
function turnRed(){this.style.backgroundColor = "red"};
$('tr').click(turnRed);
と:
は、より高速な方法であると、より少ないメモリを使用していますhttp://jsperf.com/function-assignment
オプション:
10k行の表を作成し、プロファイラーを使用して、人間がどのくらい速いかの違いの影響を制限するために、おそらくテストをスクリプト化するためにSeleniumを使用します。 ChromeとFirefoxには素晴らしいプロファイラーがありますが、影響についてはIE8/9と似たようなことを考えてみてください。 –