отсутствующие значения от оператора распространения

      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 значений, почему? как получить все значения?

1 ответ

Решение

Потому что вы использовали <tcode id="3257094"></tcode>для вызова, и первый аргумент не является аргументом для передачи, это значение, которое будет использоваться во время вызова. Итак, это первое значение не отображается в аргументах fun видит (вместо этого это значение, заключенное в оболочку объекта, если это код свободного режима).

Нет причин использовать fun.call в вашем примере просто:

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

но если ты нужен нам call по какой-то причине вы должны указать другой первый аргумент (чтобы использовать его как this во время разговора):

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

(Примечание: в современном JavaScript почти никогда не бывает причин использовать argumentsпсевдо-массив. Вместо этого используйте параметр rest, который дает вам истинный массив.)

С этими изменениями:

Другие вопросы по тегам