JavaScript";“论点”-用其他参数传递函数

JavaScript";“论点”-用其他参数传递函数,javascript,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,

下面的函数
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;
函数addOne(a){
返回a+1;
}
函数乘法(a、b、c、回调){
var i,ar=[];
对于(i=0;i<3;i++){
ar[i]=回调(参数[i]*2);
}
返回ar;
}
myarr=乘(1,2,3,加一);
迈尔;

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

您应该考虑将回调始终作为第一个参数,并像这样……/P>分裂参数。

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


然后,
callback
有您的回调,您可以使用
call()
apply()
或plain
()
,而
argumentsRay
将剩余的参数作为一个适当的数组进行调用。

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

您应该考虑将回调始终作为第一个参数,并像这样……/P>分裂参数。

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

然后,
callback
有你的回调函数,你可以用
call()
apply()
或者普通的
()
,而
argumentsRay
把剩下的参数作为一个合适的数组来调用。

这一行
for(i=0;i<3;i++){
正在保护你

在它点击
回调
参数

之前停止(i=0;i<3;i++){的这一行
正在保护您


在它点击
回调
参数

之前停止,因为您仅为前3个参数运行循环。i<3为i=0、i=1、i=2运行循环

因为您仅为前3个参数运行循环。i<3为i=0、i=1、i=2运行循环

我通常知道什么是“调用”是的,但是您能解释一下它在您编写的示例代码中是如何工作的吗?谢谢。@mjmitche
arguments
变量是一个对象,而不是数组,尽管它公开了一些类似数组的属性。要能够调用
shift()
在它上面,我们需要它作为一个真正的数组。为此,我们可以调用参数数组上的
数组
切片()
,使用
call()
将对象作为
this
传递。当使用
slice()
而没有参数时,它会将对象的副本作为数组返回(如果在标准数组上使用,则返回数组的副本)。谢谢,如果您需要参数作为数组来调用shift(),并且如果slice()以数组的形式返回对象的副本(即参数),我不明白为什么需要使用“call()以这样的方式传递对象。”Slice将其转换为一个数组,shift在数组上工作。为什么它不能如此简单。如果您有时间澄清,请澄清。再次感谢。@mjmitche,因为当您正常执行
Slice()
时,数组是
this
call()
允许您调用函数,并使用其第一个参数设置
变量。我通常知道什么是“调用”是的,但是您能解释一下它在您编写的示例代码中是如何工作的吗?谢谢。@mjmitche
arguments
变量是一个对象,而不是数组,尽管它公开了一些类似数组的属性。要能够调用
shift()
在它上面,我们需要它作为一个真正的数组。为此,我们可以调用参数数组上的
数组
切片()
,使用
call()
将对象作为
this
传递。当使用
slice()
而没有参数时,它会将对象的副本作为数组返回(如果在标准数组上使用,则返回数组的副本)。谢谢,如果您需要参数作为数组来调用shift(),并且如果slice()以数组的形式返回对象的副本(即参数),我不明白为什么需要使用“call()以这样的方式传递对象。”Slice将其转换为一个数组,shift在数组上工作。为什么它不能如此简单。如果您有时间澄清,请澄清。再次感谢。@mjmitche,因为当您正常执行
Slice()
时,数组是
this
call()
用于调用函数并使用第一个参数设置
变量。