请注意以下事项:
function array_map(array, callback) {
for (var i = 0; i < array.length; i += 1) {
callback(array[i]);
}
}
var a = [], b = [];
array_map([1, 2, 3], function (x) { a.push(x); });
// just gives a = [1, 2, 3] as expected
// but why does this not work: ?
array_map([1, 2, 3], b.push);
// Chrome: a = [], Firefox: can't convert undefined to object
我确实理解为什么会发生这种情况,即:如果您直接将其传递给,push
则不再绑定到(而是绑定到全局对象) 。我真的不明白为什么 Chrome 没有给出错误,至少 Firefox 似乎给出了某种错误。b
array_map
如何检测是否传递了这样的函数array_map
以避免此类错误?
我希望有先进的反射技术可用于追踪函数的起源。例如b.push.constructor
给Function
,但这不是我要找的。