Я могу создать рекурсивную функцию в переменной следующим образом:
/* 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
, а не к функции (на которую она сама указывает).Это может быть желательно в некоторых обстоятельствах, но есть ли способ написать функцию так, чтобы она вызывала себя, а не переменную, в которой она хранится?
То есть можно ли изменить только * 1032?* линия functionHolder(counter-1);
, так что выполнение всех этих шагов все равно дает 3
2
1
0
, когда мы вызываем copyFunction(3);
?Я попытался this(counter-1);
, но это дает мне ошибку this is not a function
.