JS函数循环中的循环迭代器问题

And*_*Gis 1 javascript

这是我的代码:

function func(){
 for(i=0; i < 5; i++){
   alert('B');
 }
}

for(i=0; i < 5; i++){
  func();
  alert('A');
}
Run Code Online (Sandbox Code Playgroud)

我的预期是:BBBBBABBBBBABBBBBABBBBBABBBBBA

但收到的只是BBBBBA

我发现那是因为JS中存在函数范围,而不是块范围.我想知道的是如何保持这种行为.我的意思是强制阻止范围.否则很容易制造出令人讨厌的错误 - 例如在使用别人写的函数或你自己编写的函数时,但几个月前.

Den*_*nis 5

确保使用var i=0而不仅仅是i=0.否则,它会浮动到全局范围并被两个循环使用.

function func(){
    for(var i=0; i < 5; i++){
       alert('B');
    }
}

for(var i=0; i < 5; i++){
    func();
    alert('A');
}
Run Code Online (Sandbox Code Playgroud)