Я могу создать рекурсивную функцию в переменной так:
/* Count down to 0 recursively.
*/
var functionHolder = function (counter) {
output(counter);
if (counter > 0) {
functionHolder(counter-1);
}
}
При этом functionHolder(3);будет вывод 3 2 1 0. Допустим, я сделал следующее:
var copyFunction = functionHolder;
copyFunction(3);выведет, 3 2 1 0как указано выше. Если я затем изменил functionHolderследующим образом:
functionHolder = function(whatever) {
output("Stop counting!");
Потом functionHolder(3);дадут Stop counting!, как положено.
copyFunction(3);теперь дает то, 3 Stop counting!на что ссылается functionHolder, а не функцию (на которую указывает сам). В некоторых случаях это может быть желательно, но есть ли способ написать функцию, чтобы она вызывала себя, а не переменную, которая ее хранит?
То есть, можно ли изменить только строку, functionHolder(counter-1);чтобы выполнение всех этих шагов по-прежнему давало 3 2 1 0при вызове copyFunction(3);? Я пробовал, this(counter-1);но это дает мне ошибку this is not a function.