搜尋

首頁  >  問答  >  主體

javascript - 延遲執行函數 setTimeout 前面的var xxx=null是什麼作用?

第一次發文見諒..
我想做一個效果滑鼠在p上停留兩秒後執行一些函數,不超過兩秒不執行;
然後網路上找了setTimeout這個函數成功解決了,因為一直是自學的所以基礎薄弱,有些不懂的地方求解

總共三個問題在程式碼中註解了,萬分感謝!
程式碼:

<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>
伊谢尔伦伊谢尔伦2755 天前572

全部回覆(3)我來回復

  • 世界只因有你

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

    1. setTimeout會回傳一個整數id,是計時器編號,事先宣告一個變數自然是儲存編號用了;

    2. 為什麼不能在這裡聲明?要知道var是函数作用域的,在function里边声明的变量一出去就没了,你叫另一个匿名函数的clearTimeout到哪去找這個變數?

    3. 這裡的if主要是嚴謹,在if主要是严谨,在setTimeout成功返回计时器编号(因为初始是null,如果没返回肯定就false了)的情况下,才会执行clearTimeout(timer)成功回傳計時器編號(因為初始是null,如果沒回傳肯定就false了)的情況下,才會執行clearTimeout(timer )這句,避免前邊執行錯誤時繼續執行錯誤代碼。

    回覆
    0
  • ringa_lee

    ringa_lee2017-05-19 10:40:43

    首先,setTimeout定時器在使用後會進行clear清除,為了能知道該清楚哪個定時器,因此要加上一個變量,也就是定時器變化。
    其次,函數作用域。 function外部無法直接存取內部變量,因此要在function外部定義變數供給不同function使用。
    最後if(timer)主要是避免timer已經關閉的情況下再去觸發clear報錯的情況了。

    回覆
    0
  • 某草草

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

    多謝樓上兩位!

    回覆
    0
  • 取消回覆