私はthis questionを見ましたが、私はこれに何が問題なのでしょうか?setTimeOutパラメータで関数を実行
var id = 12;
setTimeout(showGrid ('i want to pass variable ' + id + ' here'), 5000);
私は上記のコードが良い解決策ではないことに興味があります。私はChromeをインストールしただけで、試してみました。ブラウザの問題はありますか?
なぜ匿名機能が優れているのですか?
私はthis questionを見ましたが、私はこれに何が問題なのでしょうか?setTimeOutパラメータで関数を実行
var id = 12;
setTimeout(showGrid ('i want to pass variable ' + id + ' here'), 5000);
私は上記のコードが良い解決策ではないことに興味があります。私はChromeをインストールしただけで、試してみました。ブラウザの問題はありますか?
なぜ匿名機能が優れているのですか?
で
と小o
に気づくあなたはクロージャを使用することができます。
var id = 12;
setTimeout(function() {
showGrid('i want to pass variable ' + id + ' here');
}, 5000);
そして、ここではlive demoです。コメントから
編集(ミロ):
setTimeout関数は、コールバックまたは文字列変数を期待しています。あなたはあなたのコードが無効であるようにそのようなものを渡すことはありません。どのように動作するはずでないshowGrid関数を直接呼び出しています。 showGrid関数は5秒後に呼び出す必要があります。
setTimout
は、最初の引数として関数を、2番目の引数として時間を、次に関数に渡すオプションの引数を求めます。
function showGrid(str) {
return str;
}
とあなたがsetTimeout
を以下している:あなたが機能している場合ので、
setTimeout(showGrid("..."), 5000);
を、それはこのように終わるので、あなたは、showGrid
を呼び出し、setTimeout
に戻り値を渡している。
// "..." is returned from showGrid("...")
setTimeout("...", 5000);
および"..."
は機能ではありません。ですから、これを回避するには2つの方法があります(ダーリンの答えのように)エンクロージャーを作るか、時間の後に引数を追加することができます。
setTimeout(function() {
showGrid("...");
}, 5000);
// same thing
setTimeout(showGrid, 5000, "...");
ベアフル。すべてのIEバージョンで動作するわけではありません。そのため、別の関数を返す関数を使用する方が良い理由です。これは、evalが安全でない可能性があるため、文字列を渡すよりも優れています。 –
var id = 12;
setTimeout("showGrid ('i want to pass variable " + id + " here')", 5000);
最初のパラメータはずっとあなたがeval
関数に渡すだろうかのように、文字列を取ります。 setTimeout
あなたはそれを閉鎖することができます。それとも、それはよくあるのですか? –
いいですが、これはなぜより良いですか?他のコードスニペットの問題は何ですか? – Bakudan
@Milo、他のコードスニペット?あなたの質問に表示されているものは?はいの場合、質問に表示されているスニペットは機能しません。 –