JScript を使用する場合、Web ページの UI アニメーション効果などを生成するなど、定期的にメソッドを実行する必要がある場合があります。これは setInterval または setTimeout をよく使用するメソッドですが、これら 2 つのメソッドはスクリプト ホストによってシミュレートされたタイマー スレッドであるため、メソッドを呼び出すときにパラメータを渡すことができません。
一般的な使用シナリオは次のとおりです:
window.setTimeout("delayRun()", n);
window.setInterval("intervalRun()", n); window.setInterval(intervalRun, n);
明らかに、呼び出しにパラメータを強制的に置き換えます: window.setTimeout("layRun(param)", n); 🎜>
コードをコピーします
は、文字列リテラルの形式でメソッドを呼び出す場合、param であるため、すべて間違っています。グローバル変数 (つまり、ウィンドウ オブジェクト変数) である必要があり、関数ポインター形式での呼び出しは完全に間違っています。これは、関数の戻り値を setTimeout/setInterval 関数のパラメーターとして扱っています。これは、私たちが期待しているものではありません。全て。
この問題の解決策は、匿名関数のパッケージ化を使用することです。次のシナリオでは、これを実行します。
コードをコピー
。
{
> intervalRun(param);
}, 888);
function innerRun(times)
{
// todo: 時間パラメータに依存します
}
このようにして、delayRun/intervalRun 関数にパラメータを渡すためにグローバル変数に依存することはできなくなります。結局のところ、ページ内にグローバル変数が多すぎると、開発やデバッグに大きな混乱が生じることになります。そしてスクリプトの管理。