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 (menggunakan penutupan)
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
dikira bersama? Termasuk selepas menggunakan penutupan (C), ia masih muncul setiap 3000ms.
i*3000
和3000
,console
Perbezaan dalam pop timbul, Perbezaan ini juga ditunjukkan dalam penutupan C. Mengapa terdapat perbezaan sedemikian? Saya telah melihat struktur pelaksanaan baris gilir JS sebelum ini, dan saya tahu bahawa fungsi seperti setTimeout mesti menunggu kod lain dilaksanakan sebelum memulakan pelaksanaan Jika terdapat berbilang setTimeout, keutamaan akan diberikan mengikut tempoh masa tetapan (masa penetapan lebih pendek dahulu) . Saya benar-benar tidak tahu mengapa terdapat perbezaan sedemikian, dan saya masih tidak dapat memahaminya - -
for (var i=1;i<6;i++) {
!function (num) {
setTimeout( function timer() {
console.log(num);
}, num*3000 );
}(i)
}
console
,去掉num*
kemudian ia muncul serentak. Bukankah operasi darab dilakukan?
setTimeout
每隔3000ms弹出一个的话,时间不应该是3000,6000,9000,12000吗,你是不是跟setInterval
搞混了。然后再说一点setTimeout(fn,time),这是个函数的执行,setTimeout的创建与主js是同步的(这个时候time的值就已经确定了),异步的是其中的fn的执行(执行的时候再去找内部的
i
或者num
akan mengurangkan kesan penutupan, dsb.).Jika anda mencari acara loop js di tapak, mesti ada banyak soalan dan penjelasan berulang.
setTimeout
的延迟是相对于你运行它的那一刻,你这个for
Gelung dan tetapkan semua kelewatan sekali gus Yang pertama ialah 3 saat berbanding masa semasa, yang kedua ialah 6 saat berbanding masa semasa, yang ketiga ialah 9 saat berbanding masa semasa... dan seterusnya. Akhirnya, bukankah ia tercermin dalam output setiap 3 saat...