JavaScript — это хорошая практика для использования глобальных переменных в рекурсии

Я помогаю кому-то в его школьном задании — мы пытаемся написать рекурсивную функцию (если это имеет значение — либо в PHP, либо в JavaScript).

Я хорошо понимаю принципы рекурсии, но я не написал ни одного из них с «академической» точки зрения.

Это хорошая практика, чтобы использовать глобальную переменную для хранения результата, что-то вроде:

var results = [];

var rec = function(a) {
...
if (match)
results.push(someValue);
}

Или я должен использовать возврат для сбора всех этих результатов вместе (что было бы гораздо сложнее)?

1

Решение

Хорошей практикой является использование как можно меньшего числа глобальных переменных, предпочтительно ни одной1.

Чтобы избежать необходимости использования глобальной переменной в рекурсии, вы можете использовать внутреннюю функцию, которая использует замыкание:

var rec = function(a) {
var someValue = [];
function dorec() {
// stuff happens
if (match)
results.push(someValue);
}
}
dorec();
}

1 Дуглас Крокфорд состояния

Все переменные должны быть объявлены перед использованием. JavaScript не
требуется, но это делает программу легче для чтения и делает
легче обнаружить необъявленные переменные, которые могут стать подразумеваемыми
Глобал. Подразумеваемые глобальные переменные никогда не должны использоваться. Использование глобального
переменные должны быть минимизированы.

3

Другие решения

Чтобы расширить существующие комментарии и дать вам конкретный пример, вот код для рекурсивного добавления четных чисел к данному массиву:

var match;
var rec = function(a, res) {
if (a < 0) {
return res;
}

match = a % 2 == 0;

if (match) {
res.push(a);
}
return rec(a - 1, res);
}

var results = rec(10, []);

alert(results);

и скрипка: http://jsfiddle.net/xukukggL/

3

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector