下面的函数multiply
传递回调函数“addOne”。函数乘法返回[3,5,7]。
由于回调函数addOne是函数multiply的参数之一,并且由于函数multiply的参数都乘以2,为什么回调函数本身(即addOne)不会乘以2?换句话说,我不希望函数乘以返回[3,5,7]
,而是期望它返回[3,5,7, NAN]
,因为函数不是数字?
JavaScript解释器是否知道不会将它乘以2?
function addOne(a) {
return a + 1;
}
function multiply(a,b,c, callback) {
var i, ar = [];
for (i = 0; i < 3; i++) {
ar[i] = callback(arguments[i] * 2);
}
return ar;
}
myarr = multiply(1,2,3, addOne);
myarr;
答案 0 :(得分:4)
因为你的循环条件是<3
(hehe),这意味着它不会下标回调(最后一个元素)。
您应该考虑始终将回调作为第一个参数,并将参数拆分为......
var argumentsArray = Array.prototype.slice.call(arguments),
callback = argumentsArray.shift();
然后,callback
包含您的回调,您可以使用call()
,apply()
或普通()
来调用,而argumentsArray
将其余的参数作为一个合适的阵列。
答案 1 :(得分:0)
此行for (i = 0; i < 3; i++) {
正在保护您。
在它到达callback
参数
答案 2 :(得分:0)
因为您只运行前3个参数的循环。我&lt; 3次运行i = 0,i = 1,i = 2