最初はほとんどのコードを理解しましたが、すべてではありません。配列の簡略表記と無名関数はわかりましたが、sortFunctionには2つの引数が必要です。このため、私はをなぜ理解していませんでしたかあなたはこれをやるでしょう:達成したいコード。
幸いにも、Googleの検索で解決しました。あなたはjsPerfサイト上のコードを見つけ、このリンクでコンテキストに示した質問から元の関数を表示することができます。
http://jsperf.com/jquery-1-4-3-perf-degrade/4
今、私たちはまた、コードのコメントを見ることができます:
// Here we check if the JavaScript engine is using some sort of
// optimization where it does not always call our comparision
// function. If that is the case, discard the hasDuplicate value.
// Thus far that includes Google Chrome.
[0, 0].sort(function() {
baseHasDuplicate = false;
return 0;
});
ソート関数の仕組みに慣れていれば、今は完璧です。シーケンスをソートするとき、ソートアルゴリズムは、シーケンスから2つのアイテムを頻繁に比較し、どちらを先にソートするかを知る必要があります。このような関数は、ソートをカスタマイズできるようにするために、別の関数を引数として渡すことができることが多く、この関数がどのように項目を比較するかを決定する作業です。
この場合、既にソートされた小さな配列があります。合理的な並べ替えアルゴリズムは、この関数を正確に1回呼び出してから終了する必要があります。しかし、javascriptコンパイラは、特定の状況でcompare関数を最適化しようとし、呼び出されないことがあります。したがって、このコードの目的は、いつ起こっているのかを検出することです。関数を呼び出す前に、まずbaseHasDuplicate
の値をtrueに設定します。次に、このコードを実行し、baseHasDuplicateが変更されたかどうかを確認します。
あなたはsort()かanonymous関数を意味しますか? – usoban
@usoban私は知っている。 –
いいえ、 '関数'によって、あなたはどちらを意味していますか?ソート関数、または引数? – usoban