Это называется рекурсия. Функция, которая вызывает себя до тех пор, пока не будет выполнено какое-либо условие, в этом случае условием является массив a
. По существу эта функция принимает функцию f
и массив a
в качестве параметров. Если массив не пуст, он удаляет последний индекс и снова вызывает себя.
Это продолжается до тех пор, пока массив не будет пуст, а затем каждый рекурсивный вызов вернется и перейдет к следующей строке, которая вызывает функцию, которая была передана вначале, передавая ему значение индекса массива, которое оно выскользнуло, и добавляет возвращаемый результат обратно в массив.
Ниже приведен пример его работы. Push никогда не выполняется до тех пор, пока массив не будет пуст, но до тех пор, пока массив будет иметь больше, чем 0 при первом вызове, в конце концов будет выполняться нажатие. Если массив был пуст, ничего не происходит.
Fiddle: https://jsfiddle.net/3joe4yvz/
function a(f, d) {
if (d.length > 0) {
var b = d.pop();
a(f, d);
d.push(f(b));
}
}
var someArray = [1,2,3];
function addOne (value) {
return value + 1;
}
a(addOne,someArray);
alert(JSON.stringify(someArray));
'function incr (n) {return n + 1}' и попытаться перейти к '_ar = [[1,2,3,4], 1,2, [3,4,5, 6]] '' a (f, _ar) 'then print' _ar' –
По сути, операция 'map' действительно ужасно. –
в скором времени изменит значение массива, применив функцию обратного вызова на нем. –