我的目标是使用setInterval函数动态填充数组。所以我创建了一个全局变量数组,我可以在setInterval函数的范围之外访问它。但是当我尝试做console.log时,它是空的。
但是,如果我尝试在setInterval函数中执行console.log,我可以看到每1000毫秒填充一次数组。
它应该是一个全局变量,所以我应该能够看到变量吗?为什么在功能之外看不到它?
下面是代码:
var array = [];
var n;
setInterval(function(){
n = Math.random();
if(n < 0.5){
array.push('white');
}else{
array.push('black');
}
// console.log(array); // i can see the array here
}, 1000);
console.log(array); // but i cannot see the array here
更新:
好的,我现在知道它为什么空了。所以当我把setTimeout设为5secs时,我现在可以看到内容了。
setTimeout(function(){
console.log(array); // i can now see the array!
}, 5000);
答案 0 :(得分:0)
因为你使用setInterval
,延迟1秒,要添加到数组,最后一行console.log(array);
在任何一个interval函数之前执行,所以数组仍然是空的。 / p>
这里有好消息:http://javascript.info/tutorial/settimeout-setinterval
答案 1 :(得分:0)
我很确定你“看不到”的数组实际上是显示正确的数组,一个空数组。它在函数first array.push之前被调用,因此它显示为空。
答案 2 :(得分:0)
setInterval
计划要异步执行的函数。这意味着首先执行以下代码,然后在一段时间之后执行调度函数。
答案 3 :(得分:-1)
我无法看到数组的原因是因为没有足够的时间让控制台记录内容,所以通过添加另一个setInterval或setTimeout来延迟执行console.log,我现在可以看到内容。
var array = [];
var n;
setInterval(function(){
n = Math.random();
if(n < 0.5){
array.push('meron');
}else{
array.push('wala');
}
// console.log(array); // i can see the array here
}, 1000);
setInterval(function(){
console.log(array); // i can now see the array!
}, 2000);