匿名関数の式に使用したsetTimeout:Javascriptが:私は最近、いくつかのものを維持するためにはJavaScriptを学び始め、この問題に今日走った
初期化が呼び出されると、私はmoveCharが呼ばれることを期待this.moveChar = function(){
// body here
setTimeout(moveChar,1000);
}
this.initialise= function(){
this.moveChar();
}
、繰り返さ1000msごとに1回呼び出す
しかし実際にはmoveCharは一度呼び出されるとそれだけです。私が読んだ他のスタックオーバーフローの投稿に基づいて、私はそれが宣言されているのではなく表現されている関数と関係していると考えました。私は使用しようとしました
this.moveChar = function recMove(){
// body here
setTimeout(recMove,1000);
}
運もありません。
どのように私はこれを修正することができますか?
編集:私がする必要があることは、毎秒1回呼び出されるmoveChar関数を持たせることです。 setTimeout再帰よりも優れたアプローチがある場合は、私はそれを開いています
サイド 'body here'に' this'を使用していますか?その場合は、コール中に正しいコンテキストをバインドする必要があります。 –
最初に特定の遅延のたびに関数を実行したい場合は、 'setInterval'を使います。次に、 'setTimeout(moveChar、1000);'を実行すると、JSは 'moveChar'という名前の変数を探して何も見つけられません。 'moveChar'はオブジェクトの一部で、' this.moveChar'では 'object.moveChar'としてアクセスする必要があります。今度は再帰的にループしているので、 'this'をもう一度バインドする必要があります。あなたのコードは 'setTimeout(this.moveChar.bind(this)、1000)' – Rajesh
になります。関数moveCharはthis.VARIABLENAMEを使っていくつかのグローバル変数を使用してそれらを参照します。コンテキスト部分へのバインディングについて詳しく説明できますか? – kcns15