javascript - Perlaksanaan penyataan kod JS yang tidak berurutan adalah perkara biasa, tetapi masalah timbul secara langsung.
滿天的星座
滿天的星座 2017-06-26 10:50:14
0
4
688
  1. Saya mahu membuat pop timbul secara automatik bersembunyi selepas 3 saat saya menetapkan kod berikut:

document.getElementById("alertMessageSel").style.display = "block";
document.getElementById("alertMessage").innerHTML = "两次输入手机号不一致!";
var t = Date.now();           
var t1 = Date.now() + 100;
while(t1 - t <= 3000) {
    t1 = Date.now();
};
document.getElementById("alertMessage").innerHTML = "";
document.getElementById("alertMessageSel").style.display = "none";

Tiada masalah dengan penyahpepijatan satu langkah Ia akan dilaksanakan secara berurutan Saya merujuk kepada titik rehat Kesannya adalah sama seperti yang saya bayangkan .
Saya fikir js sepatutnya mempunyai kaedah pelaksanaannya sendiri semasa proses berjalan.

2 Saya ingin tahu mekanisme operasi dan cara melaksanakannya untuk mencapai kesan yang diinginkan.

滿天的星座
滿天的星座

membalas semua(4)
巴扎黑
document.getElementById("alertMessageSel").style.display = "block";
document.getElementById("alertMessage").innerHTML = "两次输入手机号不一致!";
setTimeout(function () {
    document.getElementById("alertMessage").innerHTML = "";
    document.getElementById("alertMessageSel").style.display = "none";
}, 3000);
刘奇

Ini daripada poster asal Apabila anda mengklik untuk memaparkan bingkai timbul, tambahkan selang masa tamat selama tiga saat untuk menyembunyikan bingkai timbul secara automatik atau mengalih keluar struktur bingkai timbul yang sepadan

小葫芦

Apakah mekanisme penyekatan?
Mekanisme penyekat Js berkaitan dengan kaedah pemprosesan satu utas enjin Js. Benang tunggal yang dipanggil bermakna hanya kod tertentu boleh dilaksanakan pada masa tertentu dan menyekat kod lain.
Oleh kerana penyemak imbas dipacu peristiwa, banyak gelagat dalam penyemak imbas adalah tak segerak (Tidak segerak), dan mudah untuk peristiwa dicetuskan secara serentak atau berterusan. Apabila peristiwa tak segerak berlaku, acara akan dibuat dan diletakkan dalam baris gilir pelaksanaan, dan kod akan dilaksanakan selepas pelaksanaan kod semasa selesai Peristiwa seperti peristiwa klik tetikus, peristiwa pencetus pemasa dan panggilan balik penyelesaian XMLHttpRequest akan semua dimasukkan ke dalam pelaksanaan Menunggu dalam barisan.
Mengenai mekanisme penyekatan Js, anda boleh melihat sekeping kod berikut Secara amnya, kami akan berfikir bahawa kod ini akan log keluar 0,1,2

untuk(var i=0;i<3;i++){

setTimeout(function(){
    console.log(i);
}, 10);

}
Malah, hasil log kod ini ialah 3,3,3. Ini adalah masalah yang boleh dihadapi oleh pemula dalam JS. Sebab khusus adalah kerana mekanisme penyekatan gelung for. Dalam kod di atas, pemasa setTimeout perlu menunggu gelung for untuk menyelesaikan pelaksanaan Selepas perlaksanaan gelung for selesai, i sudah 3, dan setTimeout mula dilaksanakan pada masa ini, jadi console.log(i) akan. menjadi 3.
Mengapa i ialah 3, sila semak urutan pelaksanaan gelung for Apabila i ialah 2, syarat gelung dipenuhi dan blok kod dijalankan Kemudian i++ tidak dipenuhi dan blok kod tidak dilaksanakan, kitaran berhenti.
Untuk gelung for, ingat gelung berhenti apabila syarat tidak dipenuhi Untuk kod di atas, ia boleh dilihat bahawa ia tidak berpuas hati apabila i=3.
Cara menyelesaikan sekatan acara
Sebenarnya, sekatan adalah kaedah pemprosesan enjin js Sebaik-baiknya jangan berfikir tentang menyelesaikan "menyekat", tetapi memasukkan kod yang ingin kita laksanakan ke dalam "benang utama". Sukar untuk difahami dengan cara ini, jadi mari kita ambil kod di atas sebagai contoh dan pergi terus ke kod

untuk(var i=0;i<3;i++){

(function(i){
    setTimeout(function(){
        console.log(i);
    }, 10);
})(i)

Dalam kod di atas, kami menambah fungsi tanpa nama yang dilaksanakan serta-merta, dan diluluskan dalam i gelung for sebagai parameter sebenar. Dengan cara ini, setTimeout akan dilaksanakan serta-merta tanpa menunggu (editor tidak mengetahui butiran di sini, jadi saya tidak akan pergi ke butiran. Saya mungkin meneka bahawa urutan sementara baharu dibuka, fungsi tanpa nama dilaksanakan serta-merta dan kemudian bertukar kembali serta-merta) .

大家讲道理

Mengapa tidak menggunakan pemasa

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan