在最新的代码,这里是下划线,在211行,读取
result || (result = iterator.call(context, value, index, list))) return breaker;
Run Code Online (Sandbox Code Playgroud)
是需要的还是声明?它可以被替换
(result = iterator.call(context, value, index, list))) return breaker; // ?
Run Code Online (Sandbox Code Playgroud)
result 最初设置为false,除了这一行之外,代码中没有其他地方被修改.
请注意,JavaScript或(||)语句返回第一个操作数(如果它是真实的),第二个操作数(如果它'是第一个操作数)是假的.这是直接来自Crockford,Good Parts.还注意到|| 做一个或与truthy/falsy值不是真/假值.
以下是从上面的链接复制的整个方法:
var any = _.some = _.any = function(obj, iterator, context) {
iterator || (iterator = _.identity);
var result = false;
if (obj == null) return result;
if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);
each(obj, function(value, index, list) {
if (result || (result = iterator.call(context, value, index, list))) return breaker;
});
return !!result;
};
Run Code Online (Sandbox Code Playgroud)
这让我觉得result||检查只是为了以防万一...或支持forEach定义的环境(例如通过垫片),但事实some并非如此.
正如在评论中指出,强调对本地循环方法依赖(forEach,map和朋友)似乎并没有成为一个绝妙的主意,有几个原因:
Array.prototype 可被其他(恶意或愚蠢)代码篡改 | 归档时间: |
|
| 查看次数: |
208 次 |
| 最近记录: |