2
let arr1 = [1, -2, 3, 4];
let arr2 = [8, 3, -8, 1];
function fun()
{
    console.log(arguments)
}
const fun1 = (...n) =>{
    console.log(n)
}
fun.call(...arr1, ...arr2)

输出:[对象参数] { 0: -2, 1: 3, 2: 4, 3: 8, 4: 3, 5: -8, 6: 1 }

fun1.call(...arr1,...arr2)

输出:[-2, 3, 4, 8, 3, -8, 1]

arr1 和 arr2 组合有 8 个值,但输出只有 7 个值,为什么?如何获取所有值?

4

1 回答 1

5

因为您曾经Function.prototype.call调用fun,并且第一个参数call 不是要传递给的参数fun,所以它是在调用期间使用的值this。所以第一个值不会出现在参数中funsees (如果这是松散模式代码,它是 的值this,包装在对象包装器中)。

没有理由fun.call在您的示例中使用,只是:

fun(...arr1, ...arr2);

但是如果您出于某种原因需要我们call,您可以指定一个不同的第一个参数(this在通话期间使用):

fun.call(nullOrWhateverYouWantThisToBe, ...arr1, ...arr2);

(旁注:在现代 JavaScript 中,几乎没有任何理由使用arguments伪数组。改用一个 rest 参数,它会给你一个真正的数组。)

随着这些变化:

let arr1 = [1, -2, 3, 4];
let arr2 = [8, 3, -8, 1];
function fun(...args) {
    console.log(`args.length = ${args.length}`);
    console.log(`args:`, args);
}

fun(...arr1, ...arr2);

于 2021-02-25T09:31:29.913 回答