• 締切済み

setTimeout の動作不良?

setTimeout の中で引用する関数が引用するカッコの中に 引用符で文字列を入れると正常に作動しますが 変数名を入れると、動作が停止してしまうようです。 Win 7 pro 上で、Firefox 、 IE11 の両方で試しましたが どちらも動きませんでした。 おそらく、setTimeout のバグではないかと個人的に考えていますが どのようにして、この問題を解決可能かを 教えて下さい。 <script> function TestA() { setTimeout( "alert('Hello')", 2000) ; } function TestQuote() { var stringQ = 'Hello' setTimeout( "alert(stringQ)", 2000) ; } function TestNoQuote() { var stringQ = 'Hello' setTimeout( alert(stringQ), 2000) ; } </script> </head> <body> <button onclick="TestA()" > Timer 1 </button> <button onclick="TestQuote()" > Timer 2 </button> <button onclick="TestNoQuote()" > Timer 3 </button>

みんなの回答

  • b0a0a
  • ベストアンサー率49% (156/313)
回答No.3

初級者のうちは実装のバグよりもまず、自らの認識違いを疑って下さい。

すると、全ての回答が全文表示されます。
  • kawais070
  • ベストアンサー率52% (2242/4283)
回答No.2

> setTimeout の引用する関数の中に > 変数名を入れることができないという問題が > どこかのバグであるかどうか バグじゃないですよ。 setTimeout( "alert(stringQ)", 2000); と書いたときの、"" の中の処理は、グローバルスコープで実行されるのです。なので、stringQというローカル変数は、無理なわけで。 以下のように、stringQもグローバル変数にしてしまえばOKですね。 <script> var stringQ = 'Hello'; function TestQuote() { setTimeout( "alert(stringQ)", 2000) ; } </script> <button onclick="TestQuote()" > Timer 2 </button>

mqm
質問者

お礼

とても参考になりました。 これからもよろしくご指導をお願いいたします。

すると、全ての回答が全文表示されます。
  • kawais070
  • ベストアンサー率52% (2242/4283)
回答No.1

<script> function TestQuote() { var stringQ = 'Hello'; setTimeout( function () { alert(stringQ) }, 2000) ; } </script> <button onclick="TestQuote()" > Timer 2 </button> という感じでどう?

mqm
質問者

補足

ご回答ありがとうございました。 質問をさせていただいた本来の目的は、setTimeout の引用する関数の中に 変数名を入れることができないという問題が どこかのバグであるかどうかを専門の方にお聞きしたかったことです。 よろしくお願いいたします。

すると、全ての回答が全文表示されます。