для лучшего понимания рекурсии, прямо.

у создать рекурсивную функцию в переменной следующим образом:

/* 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.

Ответы на вопрос(1)

Ваш ответ на вопрос