JavaScript“参数” - 使用其他参数传递函数

时间:2011-04-14 06:36:59

标签: javascript

下面的函数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;

3 个答案:

答案 0 :(得分:4)

因为你的循环条件是<3(hehe),这意味着它不会下标回调(最后一个元素)。

您应该考虑始终将回调作为第一个参数,并将参数拆分为......

var argumentsArray = Array.prototype.slice.call(arguments),
    callback = argumentsArray.shift();

jsFiddle

然后,callback包含您的回调,您可以使用call()apply()或普通()来调用,而argumentsArray将其余的参数作为一个合适的阵列。

答案 1 :(得分:0)

此行for (i = 0; i < 3; i++) {正在保护您。

在它到达callback参数

之前停止

答案 2 :(得分:0)

因为您只运行前3个参数的循环。我&lt; 3次运行i = 0,i = 1,i = 2