cari

Rumah  >  Soal Jawab  >  teks badan

javascript - untuk gelung dan penutupan

for(var i=1;i<5;i++){
setTimeout(function(){console.log(i)},i*1000);
}
Di sini gelung for dilengkapkan dahulu
dan kemudian i The nilai telah menjadi 5
Kemudian gelung for dilaksanakan dahulu, jadi mengapa i*1000 dilaksanakan?

为情所困为情所困2749 hari yang lalu526

membalas semua(3)saya akan balas

  • 滿天的星座

    滿天的星座2017-05-18 11:02:35

    Apabila gelung for dilaksanakan, ia bersamaan dengan menulis 4 fungsi pemasa pada halaman Pada masa ini, fungsi pemasa masih belum dilaksanakan, dan nilai pembolehubah i dalam global ialah 5 apabila masa pemasa sudah habis, fungsi pemasa dilaksanakan mengikut urutan.

    Contoh ini bukan penutupan perlu ditulis seperti ini, yang bersamaan dengan menulis empat fungsi yang dilaksanakan dengan serta-merta pada halaman Parameter sebenar yang diterima oleh empat fungsi ini adalah 1, 2, 3, dan 4 dalam urutan. Mengikut ciri penutupan: Apabila pemasa tamat, fungsi pemasa boleh mengakses parameter sebenar yang diterima oleh fungsi luarnya, jadi ia akan mencetak 1, 2, 3, 4 dalam urutan

        for(var i=1;i<5;i++){
            (function(i){
                setTimeout(function(){console.log(i)},i*1000);
            })(i)
        }
    

    balas
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-18 11:02:35

    Dalam komputer, mana-mana pembolehubah mesti membuka ruang dalam memori untuk disimpan, dan kemudian semuanya mempunyai alamat. Jika anda telah mempelajari bahasa C atau bahasa himpunan, anda harus mengetahui perkara ini dengan lebih baik.

    Mari kita bincangkan dahulu mengapa saya mengeluarkan 5 setiap kali. Kerana ruang i (iaitu, ruang ingatan yang digunakan untuk menyimpan i, secara saintifik dipanggil "tindanan") telah diubah suai lima kali, dan apabila fungsi tanpa nama dilaksanakan, ruang i menyimpan 5.

    Mari terangkan mengapa parameter kedua berbeza setiap kali. i*1000并没有修改i的值,而是会产生一个结果。那么这个结果必然要找地方去存。存储在哪呢?setTimeout每被调用一次,都会开辟一段内存空间,其中一部分空间就用于存储它的两个参数。其中一个参数就是刚才i*1000产生的结果。而setTimeout被调用了5次,于是存储了5个结果!没错,是在5个不同的空间存储了5个结果,而不是像iRuang yang sama telah diubah suai sebanyak 5 kali! Seperti yang anda boleh bayangkan, pendekatan ini sangat intensif memori.

    Bolehkah anda memahami penjelasan ini?

    balas
    0
  • phpcn_u1582

    phpcn_u15822017-05-18 11:02:35

    Apabila fungsi for memasuki utas utama, setiap setTimeout memasuki baris gilir tugasan untuk menunggu secara bergilir-gilir Selepas for dilaksanakan, setTimeout dalam baris gilir tugasan memasuki utas utama untuk pelaksanaan. Tanpa penutupan, i sudah 5 apabila setTimeout dilaksanakan dengan penutupan, nilai i akan disimpan apabila setTimeout memasuki baris gilir tugas.
    Lihat: gelung acara

    balas
    0
  • Batalbalas