私はJavaScriptの一部を持っています:
<script>
var i=1;
while(i<10){
setInterval(function(){
alert(i);
},1);
i++;
}
</script>
setInterval
1 から 10 ではなく 10番に警告しました。1 番から 10 番に警告し、1 番から 10 番まで警告を維持することを期待しています。
私はJavaScriptの一部を持っています:
<script>
var i=1;
while(i<10){
setInterval(function(){
alert(i);
},1);
i++;
}
</script>
setInterval
1 から 10 ではなく 10番に警告しました。1 番から 10 番に警告し、1 番から 10 番まで警告を維持することを期待しています。
魔法の言葉はクロージャとスコープです:
<script>
var i=1;
while(i<10){
(function(j) {
setTimeout(function(){
alert(j);
},1);
})(i);
i++;
}
</script>
つまり、 while ループは、 の値がi
アラートされる前に終了します。
また、フィドルでの順序、またはその欠如ではありません:
何が起こっているかというと、ネストされた内部関数をミリ秒ごとに実行するようにコンピューターに要求しているということです。そして、これを 10 回続けて実行するように要求しているので、最終的には、コンピューターは 1 秒間に正確に 1 万回アラートを送信する必要があります。すべての CPU を消費し、すべてのメモリを消費して致命的なエラーを引き起こすわけではないことに驚いています。
これは、 を呼び出すclearInterval()
か、ウィンドウを閉じるまで続きます。
これは推測ですが、これはあなたが望んでいたものですか?
setInterval(function(){
var i=1;
while(i<=10){
alert(i);
i++;
}
},1);