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