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