特别是在_.each
的实施中。似乎一个简单的typeof iterator === 'function'
可以做到这一点。可能只是或obj == null
检查。
// The cornerstone, an `each` implementation, aka `forEach`.
// Handles objects with the built-in `forEach`, arrays, and raw objects.
// Delegates to **ECMAScript 5**'s native `forEach` if available.
var each = _.each = _.forEach = function(obj, iterator, context) {
if (obj == null) return obj;
if (nativeForEach && obj.forEach === nativeForEach) {
obj.forEach(iterator, context);
} else if (obj.length === +obj.length) {
for (var i = 0, length = obj.length; i < length; i++) {
if (iterator.call(context, obj[i], i, obj) === breaker) return;
}
} else {
var keys = _.keys(obj);
for (var i = 0, length = keys.length; i < length; i++) {
if (iterator.call(context, obj[keys[i]], keys[i], obj) === breaker) return;
}
}
return obj;
};
答案 0 :(得分:1)
无需验证。如果函数的输入不正确,则由编程错误引起,应该通过炸毁来处理。
答案 1 :(得分:0)
如果它不是函数,你想键入检查它是否会抛出错误?如果你不打字检查就行了。