cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Apakah peranan var xxx=null di hadapan fungsi pelaksanaan tertunda setTimeout?

Maaf kerana pertama kali menyiarkan ini..
Saya ingin membuat kesan Selepas tetikus kekal pada p selama dua saat, beberapa fungsi akan dilaksanakan tidak lebih daripada dua saat;
Kemudian saya dapati fungsi setTimeout dalam talian dan berjaya menyelesaikannya, kerana saya telah diajar sendiri Jadi asas saya lemah dan saya perlu menerangkan beberapa perkara yang saya tidak faham

Sebanyak tiga soalan diulas dalam kod, terima kasih banyak!
Kod:

<script src="jquery.min.js"></script>
<script>
        var timer = null; // 1.此处为什么要在这里声明timmer=null?
        $(function(){
            $("#test").hover(
            function(){
                $(this).html("悬停");
                timer=setTimeout(function(){alert("hello")},2000); // 2.为什么不能直接去掉第
                //一行的声明 ,在此处var timer=setTimeout(...)...
            },
            function(){
                if(timer)  // 3.这里的if语句有什么作用?我试着去掉后函数也能完整运行呀
                    clearTimeout(timer);
                $(this).html("测试"); 
                });
        });   
    </script>
</head>
<body>
    <p id="test">
        测试
    </p>
</body>
伊谢尔伦伊谢尔伦2825 hari yang lalu646

membalas semua(3)saya akan balas

  • 世界只因有你

    世界只因有你2017-05-19 10:40:43

    1. setTimeout akan mengembalikan id integer, iaitu nombor pemasa Pengisytiharan pembolehubah terlebih dahulu secara semula jadi digunakan untuk menyimpan nombor setTimeout会返回一个整数id,是计时器编号,提前声明一个变量自然是存储编号用了;

    2. 为什么不能在这里声明?要知道var是函数作用域的,在function里边声明的变量一出去就没了,你叫另一个匿名函数的clearTimeout到哪去找这个变量?

    3. 这里的if主要是严谨,在setTimeout成功返回计时器编号(因为初始是null,如果没返回肯定就false了)的情况下,才会执行clearTimeout(timer)

    Mengapa ia tidak boleh dinyatakan di sini? Anda mesti tahu bahawa var berada dalam skop fungsi Pembolehubah yang diisytiharkan dalam function akan hilang sebaik sahaja ia keluar Anda memanggil clearTimeout Di manakah saya boleh mencari pembolehubah ini? 🎜🎜 🎜🎜 if di sini adalah sangat ketat Ia hanya akan berlaku apabila setTimeout berjaya mengembalikan nombor pemasa (kerana nilai awal adalah batal, jika ia tidak mengembalikannya pasti akan. be false) Jalankan ayat clearTimeout(timer) untuk mengelak daripada terus melaksanakan kod ralat apabila ralat pelaksanaan sebelumnya berlaku. 🎜🎜 🎜

    balas
    0
  • ringa_lee

    ringa_lee2017-05-19 10:40:43

    Pertama sekali, pemasa setTimeout akan dikosongkan selepas digunakan Untuk mengetahui pemasa yang hendak dikosongkan, pembolehubah mesti ditambah, iaitu perubahan pemasa.
    Kedua, skop fungsi. Pembolehubah dalaman tidak boleh diakses terus di luar fungsi, jadi pembolehubah mesti ditakrifkan di luar fungsi untuk digunakan oleh fungsi yang berbeza.
    If(pemasa) terakhir adalah terutamanya untuk mengelak daripada mencetuskan ralat yang jelas apabila pemasa telah ditutup.

    balas
    0
  • 某草草

    某草草2017-05-19 10:40:43

    Terima kasih kedua-duanya di atas!

    balas
    0
  • Batalbalas