Я могу создать рекурсивную функцию в переменной следующим образом:
/* 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
.