我刚刚阅读了这篇关于命名函数表达式及其与 IE <= 8 的不兼容性的文章。
我特别对一种说法感到好奇:
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)。
我更喜欢包含一些测试数字或解释这些功能在运行时有何不同的答案。