的Javascript环路与警报

问题描述:

您好我很困惑与alertconsole.log的Javascript环路与警报

var count = []; 
 

 
function iterate(number) { 
 
    count.push(number); 
 
    for (i = 0; i < count.length; i++) { 
 
    console.log(count[i]); 
 
    } 
 
} 
 

 
iterate(2); 
 
iterate(3); 
 
iterate(4);

控制台会给我2,2,3,2,3,4,但是当我改变控制台。记录(count [i])以提醒(count [i]);它会重复三次,为什么?

var count = []; 
 

 
function iterate(number) { 
 
    count.push(number); 
 
    for (i = 0; i < count.length; i++) { 
 
    alert(count[i]); 
 
    } 
 
} 
 

 
iterate(2); 
 
iterate(3); 
 
iterate(4);

做到这一点上面,但它确实on JSBin

+0

附注:上述内容不会造成问题,但代码正在沦为[隐式全局的恐怖](http://blog.niftysnippets.org/2008/03/horror-of-implicit- globals.html)*(这是我贫血的小博客上的一篇文章)*。在'iterate'中声明'i'。 –

+0

我很困惑,怎么样?我认为警报输入计数数组的元素,每当我调用该函数,数组的长度将增加 –

+0

我的意思是当我在JS Bin(警报类型)中尝试它时,它会在第一个,第二个和第三个电话 –

两个版本都显示相同的内容。

count开始为空。

第一次调用,你推到2所以count[2],然后循环只有一次(i == 0),输出count[0](这是2)。

在第二个呼叫,则推入3count所以它有在它[2, 3],和循环两次(i == 0i == 1),显示count[0](2)和count[1](3)。

在第三呼叫,则推4count所以它有在它[2, 3, 4],和循环三次(i == 0i == 1i == 2),显示count[0](2),count[1](3),和count[2](4)。


回复您的评论:

我的意思是,当我尝试在JS斌(警报类型),它只会在第一,第二和第三个呼叫警报2

啊!你遇到了JSBin的“无限循环保护”。如果你运行它here,并期待在Web控制台,你会看到

在第5行退出潜力无限循环要禁用环路保护:加“// noprotect”你的代码

...但是如果您运行the output page of that,则会显示完整结果。

alert版本触发了开发模式的无限循环的保护,因为它看到相同的代码发生不止一次,但100ms以上的间隔(因为当您关闭alert延迟)更多。