IE10、IE11 で第三引数以降を使って関数に値を引き渡せるので、第一引数は無名関数を書くか、定義済みの関数名を書くのが正解です。但し、過去の IE9 以前の対応が必要な場合は、グローバル変数等を使用すればいいと思います。文字列は使えますが、セキュリティ上の理由から避けたほうが良いとされています。 昔の IE のマニュアルにはこう書いていたのですが、 文字列。指定されたインターバルで実行されるコード。 ( eval() を使うのと同様の理由で非推奨です / Mozilla のドキュメント より ) 最新のマニュアルではこう書かれています。 ( このドキュメントでは、第3引数が正しくないようです / 正解は Mozilla のドキュメントを参照 ) 指定した間隔が経過したときに実行されるコードを示す関数ポインタや文字列を指定します( Microsoft の英文には API なので、実際に function pointer とあります ) ▼ 無名関数 現在では関数名を記述する場所で無名関数をその場に書く事が多いですが、もちろん文字列でも動作します。文字列の場合は、処理する内容をタイマーが発生する時間に内容を確定させておく事が重要です( 全て文字列なので、それがかならずそのまま実行される事を利用します ) 具体的には、関数内に値を埋め込む事で時間差の問題を解決できます。 関数名では、IE11、Firefox、Google Chrome、Opera で第三引数(関数の引数の数ぶん第4、第5と指定できます)が利用できる事を確認しています。 ( IE では IE10 以降で第3引数が使用できるようです )
<script type="text/javascript"> var param = "NO!" function startTest(param) { // OK はこの時点で確定です // ※ 文字列に startTest の引数を埋め込んでいます setTimeout( '(function(str){alert(str)})("startTestの引数:'+param+'");', 500); // 第三引数で、setTimeout 実行時点の値を引き渡します // 関数の引数を第三引数以降で渡します // ( IE9 以前は実装されていません ) setTimeout( function(a,b){console.log(param);alert(a+" / "+b)}, 600, "setTimeoutの引数:" + param, "ここは第4引数です"); setTimeout( refTest, 700, param, "ここは第4引数です"); // param 内は NO! になります // ※ グローバルの param を参照します setTimeout('alert("グローバル:"+param)',1000); } function refTest(a,b) { console.log(param); alert("定義済み関数の参照:"+a+" / "+b) } startTest("OK"); </script>
|
【JavaScript DOMの最新記事】
- IFRAME 内に外部の javascript を読み込んで画面を作成する / document.write での構築
- JavaScript でクリックの代替( 古くは dispatchEvent で呼び出し )、現在は jQuery の click() ではリンクの URL を開く事はでき無いので、$("セレクタ")..
- JavaScript : リンクから _blank で開いたページを JavaScript で閉じる場合の動作テスト
- JavaScript : ブラウザの表示を半透明で暗くする方法( scrollHeight で高さ決定 )
- JavaScript DOM と jQuery : エレメントの参照
- JavaScript : リンクのテキストの取得( Chrome、Firefox、IE / textContent、innerText、text、replace、jQuery )
- 動的に作成された IFRAME の キャラクタセットのブラウザ別の違い
- ローカル記憶域 : window.localStorage
- JavaScript : zIndex の最大値と思われる 0x7FFFFFFF を各ブラウザでテストしました
- JavaSctipt : ユーザ用(名前空間付き)イベント追加メソッドの作成
- JavaScript : 最後にクリックしたテキストフィールドを保存する
- JavaScript : クリックした要素の位置を計算して、近くにウインドウを開く