0

私はJavaScriptの一部を持っています:

<script>
  var i=1;
  while(i<10){
    setInterval(function(){
      alert(i);
    },1);
    i++;
  }
</script>

setInterval1 から 10 ではなく 10番に警告しました。1 番から 10 番に警告し、1 番から 10 番まで警告を維持することを期待しています。

4

3 に答える 3

1

魔法の言葉はクロージャとスコープです:

<script>
   var i=1;
   while(i<10){
      (function(j) {
          setTimeout(function(){
              alert(j);
          },1);
      })(i);

      i++;
   }
</script>

つまり、 while ループは、 の値がiアラートされる前に終了します。
また、フィドルでの順序、またはその欠如ではありません:

フィドル

于 2013-08-17T23:58:29.590 に答える
0

何が起こっているかというと、ネストされた内部関数をミリ秒ごとに実行するようにコンピューターに要求しているということです。そして、これを 10 回続けて実行するように要求しているので、最終的には、コンピューターは 1 秒間に正確に 1 万回アラートを送信する必要があります。すべての CPU を消費し、すべてのメモリを消費して致命的なエラーを引き起こすわけではないことに驚いています。

これは、 を呼び出すclearInterval()か、ウィンドウを閉じるまで続きます。

http://www.w3schools.com/jsref/met_win_setinterval.asp

于 2013-08-17T23:58:18.630 に答える
0

これは推測ですが、これはあなたが望んでいたものですか?

setInterval(function(){
  var i=1;
  while(i<=10){
    alert(i);
    i++;
  }
 },1);
于 2013-08-18T17:53:53.600 に答える