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