jsタイマーsetTimeoutは、ローカル変数の解決策を呼び出すことができませんでした.


javascriptでのタイマーsetTimeoutの使い方は、一般的に次のようになります.begirotateを呼び出してからタイミングに入り、rotateloopを実行するプロセスです.次のコードです.
var angle = 0;

function rotateloop() {
if (angle < 360) {
angle++;
//use angle
//......
setTimeout("rotateloop()", 100);
}
}

function beginrotate() {
//do something
//......
setTimeout("rotateloop()", 100);
}
このコードには問題があります.グローバル変数のangleが発生しました.これは明らかに良いプログラミング習慣ではないので、埋め込み関数を使う方式を考えています.コードを下記のように変更します.
function beginrotate() {

var angle = 0;

function rotateloop() {
if (angle < 360) {
angle++;
//use angle
//......
setTimeout("rotateloop()", 100);
}
}
//do something
//......
setTimeout("rotateloop()", 100);
}
このように変更した後、javascriptはエラーを報告しました.rotateloopは見つけられませんでした.明らかにset Timeoutはrotateloopという部分の埋め込み関数を見つけられませんでした.ここでちょっと変えたらこの問題を解決できます.コードは以下の通りです.
function beginrotate() {

var angle = 0;

function rotateloop() {
if (angle < 360) {
angle++;
//use angle
//......
setTimeout(rotateloop, 100);
}
}
//do something
//......
setTimeout(rotateloop, 100);
}
setTimeoutの最初のパラメータを文字列ではなく関数オブジェクトに変更するだけでいいです.