没有反应具体,所以希望可以问,但我认为扩展操作符扁平数组?
因此,使用以下求和函数对args进行求和,您可以使用.apply传递值:
function sum() {
return arguments.reduce((total, number) => total + number, 0);
}
var values = [2, 4, 8, 12, 16];
console.log(sum.apply(null, values));我认为您可以添加这个函数,并使用spread操作符将数组扁平化,这样就可以使用调用。(我知道您不会在这个实例中使用call,但我只是感到惊讶,因为我认为这种扩展会使数组变平:
function sum() {
return [...arguments].reduce((total, number) => total + number, 0);
}
var values = [2, 4, 8, 12, 16];
console.log(sum.call(null, values));这将返回字符串02,4,8,12,16
发布于 2017-01-10 10:34:00
之所以发生这种情况,是因为arguments与数组类似。数组将转换为字符串。
作为文件上说,
虽然此函数的语法几乎与apply()的语法相同,但根本的区别是调用()接受参数列表,而apply()则接受单个参数数组。
这应如预期的那样适用于:
sum(...values);
sum.call(null, ...values);
sum.apply(null, values);顺便说一下,arguments和call在ES6是不受欢迎的。
发布于 2017-01-10 10:18:51
参数是一个类似于结构的数组,所以当将数组作为参数传递时,该结构将类似于一个嵌套数组。因此,应用扩展算子可以得到一个格式为[[2, 4, 8, 12, 16]](即,[...[[2, 4, 8, 12, 16]]])的数组,而简化方法则应用0 + [2, 4, 8, 12, 16],并得到"02,4,8,12,16"。
要使其工作,您需要使用Function#apply将数组值作为参数传递,或者获取第一个参数。
function sum() {
return [...arguments].reduce((total, number) => total + number, 0);
}
var values = [2, 4, 8, 12, 16];
console.log(sum.apply(null, values));
function sum() {
return [...arguments][0].reduce((total, number) => total + number, 0);
}
var values = [2, 4, 8, 12, 16];
console.log(sum.call(null, values));
参考:呼叫和应用有什么区别?
https://stackoverflow.com/questions/41566396
复制相似问题