A
for (var i=5; i>=1; i--) {
setTimeout( function timer() {
document.write(i+"<br />");
}, i*3000 );
}
// 0 0 0 0 0
// 保存执行后,3秒后弹出第一个console(0),之后隔3秒弹出第二个,依次按照时间执行。
A2
for (var i=1; i<6; i++) {
setTimeout( function timer() {
console.log(i);
}, i*3000 );
}
// 6 6 6 6 6
// 保存执行后,3秒后弹出第一个console(6),之后每隔3秒弹出一个,依次按照时间执行。
B
for (var i=5; i>=1; i--) {
setTimeout( function timer() {
document.write(i+"<br />");
}, 3000 );
}
// 0 0 0 0 0
// 保存执行后,3秒后所有的console一齐弹出
C (en utilisant la fermeture)
for (var i=5; i>0; i--) {
!function (num) {
setTimeout( function timer() {
console.log(num);
}, i*3000 );
}(i)
}
// 1 2 3 4 5 每隔3秒依次弹出
i*3000
,i
值为多少?(1?),为什么时间依旧是3000,没有和i
sont-elles calculées ensemble ? Y compris après avoir utilisé la fermeture (C), elle apparaît toujours toutes les 3 000 ms.
i*3000
和3000
,console
La différence dans le pop-up, Cette différence se reflète également dans la fermeture C. Pourquoi y a-t-il une telle différence ? J'ai déjà vu la structure d'exécution de file d'attente de JS et je sais que des fonctions telles que setTimeout doivent attendre que d'autres codes soient exécutés avant de commencer l'exécution. S'il y a plusieurs setTimeouts, la priorité sera attribuée en fonction de la durée. réglage (le temps de prise est d'abord plus court) . Je ne sais vraiment pas pourquoi il y a une telle différence, et je n'arrive toujours pas à la comprendre - -
for (var i=1;i<6;i++) {
!function (num) {
setTimeout( function timer() {
console.log(num);
}, num*3000 );
}(i)
}
console
,去掉num*
puis il apparaît d'un seul coup. L'opération de multiplication n'est-elle pas effectuée ?
setTimeout
每隔3000ms弹出一个的话,时间不应该是3000,6000,9000,12000吗,你是不是跟setInterval
搞混了。然后再说一点setTimeout(fn,time),这是个函数的执行,setTimeout的创建与主js是同步的(这个时候time的值就已经确定了),异步的是其中的fn的执行(执行的时候再去找内部的
i
或者num
réduira l'impact des fermetures, etc.).Si vous recherchez event loop js sur le site, il devrait y avoir de nombreuses questions et explications répétées.
setTimeout
的延迟是相对于你运行它的那一刻,你这个for
Bouclez et réglez tous les retards en une seule fois. Le premier est de 3 secondes par rapport à l'heure actuelle, le deuxième est de 6 secondes par rapport à l'heure actuelle, le troisième est de 9 secondes par rapport à l'heure actuelle... et ainsi de suite. Au final, cela ne se traduit-il pas par une sortie toutes les 3 secondes...