此代码的工作原理如何?任何人都帮我理解?
var myArray = ['one','two','three'];
var logAll = function (){
var long = myArray.length;
for(i=0;i< long;i++){
console.log(myArray[i]);
}
setTimeout(logAll,50);
}
logAll();
据我说,myArray长度只有3,所以,我的日志必须给我结果为0,1,2。没关系。在我的for循环中,我为logAll函数引入了一个setTimeout,但是logAll函数如何继续调用for循环而不是3次,直到...?有谁帮我理解这个?
如果是这样,为什么这只召唤一次?
var myArray = ['one','two','three'];
var logAll = function (){
var long = myArray.length;
for(i=0;i< long;i++){
console.log(myArray[i]);
}
}
setTimeout(logAll,50);
答案 0 :(得分:3)
您始终在setTimeout
结束时致电logAll
,因此每隔50毫秒就会调用logAll
。
答案 1 :(得分:1)
此函数(logAll)在启动时调用一次。然后它从数组中获取所有键/值,并在50毫秒后重复该过程,这没有任何意义,但如果您想检查变量更改则可用
如果是这样,为什么这只召唤一次?
因为函数只调用一次而不再调用。 setTimeout()
仅创建一个函数调用。
答案 2 :(得分:1)
setTimeout行表示等待50ms,然后调用logAll。因为它在logAll中,它将自行运行导致无限循环。
我不确定setTimeout行的用途,所以我要删除它!
答案 3 :(得分:1)
您正在调用logAll
50毫秒,因此它每50毫秒运行一次for循环。因此看起来好像你处于一个永无止境的循环中,但事实上你只是不断地开始循环而你的console.log
看起来不会以正确的顺序登录。例如在一个循环完成之前,另一个循环已经开始。
答案 4 :(得分:1)
通过添加setTimeout(logAll,50);
,您创建了一个无限循环。
如果您只想记录数组的新内容,则必须保留i
(以便在下一轮中以i=3
开头)或你必须清除阵列。
后者可能更好,因为这可以避免内存泄漏(阵列会增长直到占用所有内存)。
要清除数组,请将length
设置为0
:myArray.length = 0;
。
[编辑] 在第二个示例中,logAll
被调用一次,因为setTimeout()
不重复;如果要重复调用函数,则必须在执行函数后再次调用setTimeout()
。