• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:javascriptのforループ中の変数について質問です。)

javascriptのforループ中の変数について質問です

このQ&Aのポイント
  • javascriptのforループ中の変数について質問です。1秒間隔で順番に"msg0"→"msg1"→"msg2"を表示するために、スクリプトを修正する方法を教えてください。
  • javascriptのforループ中の変数について質問です。現在、1秒間隔で順番に"msg2"と表示されますが、"msg0"→"msg1"→"msg2"と表示するためのスクリプト修正方法を教えてください。
  • javascriptのforループ中の変数について質問です。"msg2"が順番に1秒間隔で表示される問題があります。"msg0"→"msg1"→"msg2"と表示するための修正方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • my--
  • ベストアンサー率89% (91/102)
回答No.5

function test(){ var msg = []; var n = 0; for (i = 0;i < 3;i++){ msg[i] = "msg"+i; setTimeout(function(){ alert(msg[n++]); },1000 * i); } } 「修正」てことなので普通に。 質問にある変数msgの値が「"msg0"→"msg1"→"msg2"」となるのは for文内で参照した場合です。 setTimeoutに渡した関数の実行は早くてもfor文を抜けた後になりますから それぞれの関数実行時に期待する値を参照するための工夫が必要になります。

misshiki
質問者

お礼

ご回答ありがとうございました。 setTimeoutに渡した関数の実行のタイミングを勘違いしていたことに、ようやく気づきました。 まことにありがとうございました。

その他の回答 (4)

回答No.4

ひらめいたので、だれかにかかれるまえに、ついか!(さんこうにもなりませんが・・) function test() {  for(var i=0,p=[];i<3;p.push('setTimeout(function(){alert("msg'+i+++'")},'+i+'000);'));  eval(p.join('')); }

回答No.3

きっとまだまだあるにちがいない。さらにもとむ。 function test( ) {  for( i = 0; i < 3; ) {   var msg = "msg" + i;   var func = makeFunction( msg );   setTimeout( func, 1000 * ++i);  } } function makeFunction( s ) {  var func = function( ) {   alert( s );  };  return func; } //___ function test1 ( ) {  for( var i = 0; i < 3; ) {   var msg = "msg" + i;   setTimeout( (function( s ) {    return function () {     alert( s );    };   })( msg ), 1000 * ++i );  } } //___ function test2(i) {  for(i=3;setTimeout((function(s){return function(){alert('msg'+s)}})(i-1),i*1000),--i;); } //___ function chk( n ) {  alert( 'msg' + n );  return n < 2; } //0のとき待ちがないけど var cnt3 = 0; function test3( ) {  chk(cnt3++) && setTimeout( arguments.callee, 1000 ); } //___ var test4 = (function ( chk ) {  var cnt4 = 0;  var time = 1000;  return function ( ) {   chk( cnt4++ ) && setTimeout( arguments.callee, time );  }; })(  function ( n ) {   alert( 'msg' + n );   return n < 2;  });

misshiki
質問者

お礼

ご回答ありがとうございます。 多くのスクリプトをご提示いただき、大変参考になります。

  • ryu_chan
  • ベストアンサー率37% (69/186)
回答No.2

setTimeoutで設定した無名関数内でさらにその無名関数をsetTimeoutするのはいかがでしょうか? function test(){ var i = 0; setTimeout(function(){ var msg = "msg" + i; if( ++i < 3 ) setTimeout(arguments.callee, 1000); alert(msg); },1000); }

misshiki
質問者

お礼

ご回答ありがとうございます。 ご提示いただいたソースで期待どおりの結果が出ることを確認できました。 逆転の発想ですね!

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

JavaScriptでは、Sleep関数に相当するものがありません。 代替案は、検索サイトで「JavaScript Sleep」をキーワードに検索すると良いかも。

misshiki
質問者

お礼

ご回答ありがとうございます。 おっしゃるとおり、本来はsleepを検討すべきですね。

関連するQ&A