Предположим, что у меня есть эта простая функция JavaScript:
function returnArray(){
return [1, 2, 3];
}
Далее предположим, что я тогда скажу
var test = [0, ...returnArray()];
Вы ожидаете, что тест будет равен [0,1,2,3], и вы будете правы. Я пробовал это и, конечно же, работает.
Теперь у меня есть это упражнение, где я могу построить функцию double, которая принимает массив как параметр и возвращает другой массив, который содержит все исходные значения массива в два раза. Поэтому, если я называю double ([1,2,3]), я должен получить [2,4,6]. Ограничения упражнения состоят в том, что я должен использовать только деструктурирование массива, рекурсию и операторы rest/spread для создания моей функции. Никаких помощников массива не разрешено. Поэтому я придумал это:
function double(array){
if (array.length===1) return 2*array[0];
var [num, ...rest] = array;
if (rest.length!=0) return [2*num, ...double(rest)];
}
Если я запустил эту функцию с любым массивом размером не менее двух, я получаю сообщение об ошибке, говорящее, что double не является функцией. Если я удаляю оператор... перед двойным, то магически двойной является функцией снова, за исключением того, что, конечно, результат двойного ([1,2,3]) равен [2, [4,6]], что не совсем так же, как [2,4,6].
Моя первая мысль заключалась в том, что, возможно, по какой-то странной причине вы не можете использовать... перед функцией, даже если функция возвращает массив, поэтому я проверил эту гипотезу с моей функцией returnArray() выше, и выяснил, что он работает отлично. Я понятия не имею, почему это ломается в упражнении. Я могу только догадываться, что рекурсия может иметь какое-то отношение к ней, но я не знаю, почему это так. Может ли кто-нибудь указать, что случилось с моим кодом?
EDIT: Спасибо всем, это была довольно глупая ошибка! Я должен был это увидеть. Я добавил комментарии к некоторым вашим ответам.