名前付き関数式と IE <= 8 との非互換性に関するこの記事を読んだところです。
特に次の 1 つのステートメントに興味があります。
Web 開発の一般的なパターンは、ある種の機能テストに基づいて関数定義を「フォーク」し、最高のパフォーマンスを実現することです。
彼のページからの例:
var contains = (function() {
var docEl = document.documentElement;
if (typeof docEl.compareDocumentPosition != 'undefined') {
return function(el, b) {
return (el.compareDocumentPosition(b) & 16) !== 0;
};
}
else if (typeof docEl.contains != 'undefined') {
return function(el, b) {
return el !== b && el.contains(b);
};
}
return function(el, b) {
if (el === b) return false;
while (el != b && (b = b.parentNode) != null);
return el === b;
};
})();
私がこれを見たとき、私の即座の反応は、これを維持するのはひどいだろうということです. このように書かれたコードは、簡単に理解できるものではありません。
この場合、外部関数が宣言された直後に呼び出される別の関数内で関数を条件付きで定義する代わりに、ネストされたif
s の関数を作成できます。もっと長くなりますが、私の意見では理解しやすいと思います (私は C/C++/Java から来ていますが)。
これらの関数が実行時にどのように異なるかについて、いくつかのテスト番号または説明を含む回答を希望します。