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