JS では、setTimeout であっても setInterval であっても、関数名を呼び出しハンドルとして使用する場合はパラメーターを受け取ることができません。
これを解決する方法を見つける必要があります。
1. 文字列形式を使用します。 - (欠点) パラメータを定期的に変更することはできません
setInterval("foo(id)",1000);
2. 匿名関数のパッケージ化 (推奨)
window.setInterval(function()
{
foo (id);
}, 1000);
このようにして、関数 foo(id) が実行され、変数 id が渡されます。パラメータなしで返す 関数の関数
{
alert(id);
}
function _foo(id)
{
return function()
{
foo(id); 🎜>}
}
window.setInterval(_foo(id),1000);
ここでは、パラメータを受け取り、パラメータなしで関数を返す関数 _foo が定義されています。外部関数のパラメータは関数内で使用されるため、呼び出し時にパラメータを使用する必要はありません。
window.setInterval 関数で、_foo(id) を使用してパラメータなしの関数ハンドルを返すことで、パラメータを渡す関数を実現します。
4. setInterval を変更します
コードをコピーします
alert(id);
}
var _sto = setInterval;
window.setInterval = function(callback,timeout,param)
{
var args = 配列 .prototype.slice.call(arguments,2);
var _cb = function()
{
callback.apply(null,args);
_sto(_cb) ,timeout) ;
}
window.setInterval(hello,3000,userName);
上記のメソッドはすべて setTimeout にも適しています。