Saya dapat membuat fungsi rekursif dalam variabel seperti:
/* Count down to 0 recursively.
*/
var functionHolder = function (counter) {
output(counter);
if (counter > 0) {
functionHolder(counter-1);
}
}
Dengan ini, functionHolder(3);
akan menghasilkan 3
2
1
0
. Katakanlah saya melakukan yang berikut:
var copyFunction = functionHolder;
copyFunction(3);
akan menghasilkan 3
2
1
0
seperti di atas. Jika saya kemudian berubah functionHolder
sebagai berikut:
functionHolder = function(whatever) {
output("Stop counting!");
Kemudian functionHolder(3);
akan memberi Stop counting!
, seperti yang diharapkan.
copyFunction(3);
sekarang memberikan 3
Stop counting!
apa yang dirujuknya functionHolder
, bukan fungsi (yang ditunjukkannya sendiri). Ini mungkin diinginkan dalam beberapa keadaan, tetapi adakah cara untuk menulis fungsi sehingga ia memanggil dirinya sendiri daripada variabel yang menampungnya?
Artinya, apakah mungkin untuk mengubah hanya garis functionHolder(counter-1);
sehingga melalui semua langkah ini masih memberikan 3
2
1
0
saat kita menelepon copyFunction(3);
? Saya mencoba this(counter-1);
tetapi itu memberi saya kesalahan this is not a function
.