我只是通过this article上有名函数表达式读取,其与IE < = 8Javascript:分叉函数声明有效多少?
我很好奇一个特别的声明不兼容:
在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;
};
})();
当我看到这个,我的第一反应是,这将是可怕的维护。以这种方式编写的代码实际上并不容易理解。
在这种情况下,可以写一个嵌套的函数,而不是在另一个函数中有条件地定义函数,然后在声明外函数后立即调用该函数。这会更长,但在我看来更容易理解(尽管我来自C/C++/Java)。
我更喜欢那些包含一些测试编号或解释这些函数在运行时会有所不同的答案。
JavaScript确实是一种功能语言,因此返回函数的函数非常普遍。一旦你习惯了,像这样的东西变得可读性和易于在脑海中解析。 – 2011-03-31 22:09:47
你是什么意思_“不容易理解”_。这非常合理。 – Raynos 2011-03-31 22:16:46
@Matt Greer ** JavaScript不是一种功能语言。虽然它确实具有作为一级值的功能(并且还有闭包,尽管范围很广),这些功能可以被认为是功能性构建体*,这是关于相似性结束的地方。语法是“程序的”,在大多数情况下鼓励副作用,没有原生的'列表'类型,没有模式匹配,没有柯里(隐式或显式)等。 – 2011-03-31 22:26:54