Почему функция клонирования работает, когда она не существует?

#javascript

#javascript

Вопрос:

Я нашел этот фрагмент, и он глубоко копирует массив javascript.

 const makeCopy = (items) = items.map(item => Array.isArray(item) ? clone(item) : item);
 

У меня есть этот массив, из которого я делаю копию

 const a = [1, 2, 3, 4, 5];
 

После создания копии я присваиваю ее другому массиву

 const b = makeCopy(a);
 

Он копирует вещи правильно. Но если я скажу в файле Javascript

 clone(anyArrayVar);
 

Javascript сообщает, что clone не определен. Почему это происходит, когда используется описанная выше функция clone(item) .
Пожалуйста, поясните.

Комментарии:

1. Ваша исходная функция тоже не должна работать. Это должен быть рекурсивный вызов, поэтому он должен быть makeCopy , а не clone .

2. Где находится эта clone функция

3. clone на самом деле не работает, он игнорируется, поскольку элемент никогда не является массивом. В примере элемент равен 1,2,3,4 или 5, ни один из которых не является массивом

4. @Aplet123 это не рекурсивный вызов. Я проверил это. Затем я опубликовал вопрос.

5. Как упоминает @imvain2, число не является массивом. Таким Array.isArray(item) образом, возвращается false, и сопоставление происходит с самим числом, как и должно быть. Ваша clone() функция никогда не вызывается. Поэтому, когда вы вызываете ее явно, неудивительно, что она терпит неудачу, поскольку она не существует.

Ответ №1:

clone на самом деле это не работает, оно игнорируется, поскольку элемент никогда не является массивом. В примере item равен 1,2,3,4 или 5, ни один из которых не является массивом.

Вот его обновление, чтобы оно стало рекурсивным и учитывало массивы в массивах.

 function makeCopy(items) {
  return items.map(item => Array.isArray(item) ? makeCopy(item) : item);
}

console.log(makeCopy([1, [2, 3], 4, 5]))