小白,正在学习js,顺带看一点儿prototype.js的源码,发现了很多函数表达式,这么做有必要吗?为什么不直接取函数表达式的运算结果呢?
比如下面这个,感觉怎么执行结果都是false,为啥不直接 var Class = true ?
var IS_DONTENUM_BUGGY = (function(){
for (var p in { toString: 1 }) {
if (p === 'toString') return false;
}
return true;
})();
你这问题槽点很多,我都不知道从哪开始...O__O"…
首先,你这代码不完整啊,至少也是
后边正事都没干的,谁知道Class的值会是啥?
当然,我们可以知道
IS_DONTENUM_BUGGY
是啥!你觉得
IS_DONTENUM_BUGGY
是false
,是因为你使用的现代浏览器而在IE6/7/8(万恶的IE)里
IS_DONTENUM_BUGGY
是true
这里涉及到一个概念DontEnum(ES5里称之为Enumerable),即属性不能被
for..in
循环枚举比如说
for..in
不会枚举出toString,isPrototypeOf,valueOf
之类的内置属性,它们是不可枚举的如果我们重写它们(就像你的函数一样),不同的浏览器(没错,我就是说的IE)结果就会有分歧,需要
IS_DONTENUM_BUGGY
进行标识。所以函数表达式大部分时候,至少在你这里,还是很有用的。
最后,prototype.js已经是太古时期使用的框架啦,LZ你最好还是换个例子研究吧
使用函数表达式的好处是
例子:http://jsbin.com/sirup/3/edit?js,output