次のように、変数に再帰関数を作成できます。
/* 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