setTimeoutで質問です
-
0 名前: Kite9 : 2006/04/10 15:58
- setTimeoutでsetTimeout('kansu()',1000)というように関数を<'>で囲みますが、
これはどうしてですか。関数を文字列にしてしまうのではないでしょうか。
setTimeout(kansu(),1000)だとどうしていけないんでしょうか。お教えください。
-
1 名前: Pid : 2006/04/10 15:58
- > setTimeout(kansu(),1000)だとどうしていけないんでしょうか。
() は「その関数を呼び出す」という意味です。
(a). setTimeout (kansu (), 1000);
これだと kansu がその場で実行され,その戻り値が setTimeout の第一引数として渡されます。
* * *
setTimeout に kansu を渡す場合,
(b). setTimeout ('kansu ()', 1000);
のように文字列を渡せば,文字列が関数コードとして実行される決まりになっています。もしくは
(c). setTimeout (kansu, 1000);
と,() を付けずに関数本体を渡しても良いです。
個人的には,J(ava)Script での文字列操作は,避けられるなら避けた方が良いと感じています(write や innerHTML なども同様)。方法 (c) をお勧めします。
※ただし,(c) がサポートされたのは JavaScript 1.2 以降(NN 4.0,IE 5.0)です。
* * *
関連して,もし kansu に引数を渡したければ,
(d). function tmp () { kansu (10, 20); }; setTimeout (tmp, 1000);
のように別関数で包んでおきます。しかし,いちいち別関数を作るのが面倒なら
(e). setTimeout (function () { kansu (10, 20); }, 1000);
のように無名関数にしても良いでしょう。
-
2 名前: Kite9 : 2006/04/10 15:58
- Pidさん、ありがとうございます!
なるほど、setTimeoutですから即実行はまずいわけですね。納得です。
その他丁寧な解説いつもながら参考になります。多謝。