window.setTimeout()&window.set Interval()の使い方とパラメータの伝達問題を詳しく説明します。
1352 ワード
JScriptを使うには、ウェブUIの動画効果を生成するなど、間隔を置いて方法を実行する必要があります。これは、方法set Intervalまたはset Timeoutをよく使用しますが、この2つの方法はシナリオ宿主によってシミュレートされたTimerスレッドであるため、その呼び出し方法ではパラメータを伝えることができません。 私たちがよく使うシーンは:
window.setTimeout("delayRun()", n);
window.setInterval("intervalRun()", n);
window.setTimeout(delayRun, n);
window.setInterval(intervalRun, n);
明らかに強制的なパラメータの呼び出し: window.setTimeout(「delayRun(param)」、 n)
window.setInterval("intervalRun(param)", n);
window.setTimeout(delayRun(param), n);
window.setInterval(intervalRun(param), n);
すべて間違いです。stringのせいです。 litter als形式の方法で呼び出すと、paramはグローバル変数(つまりwindowオブジェクト上の変数)でなければなりません。そしてfunction pointer形式の呼び出しは完全に間違っています。これは関数の戻り値をsetTimeout/set Interval関数のパラメータとして扱いました。全く私たちが望むことではありません。 この問題を解決する方法は匿名の関数を使って包装することができます。以下のscenarioではこうします。
function foo()
{
var param = 100;
window.setInterval(function()
{
intervalRun(param);
}, 888);
}
function interalRun(times)
{
// todo: depend on times parameter
}
このようにすれば、グローバル変数に依存しないでdelayRun/intervalRun関数にパラメータを伝えることができます。つまり、ページの大域変数が多くなると、スクリプトの開発、調整、管理などに大きなpuzleをもたらします。