отсутствующие значения от оператора распространения
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, который дает вам истинный массив.)
С этими изменениями: