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