javascript - 延遲執行函數 setTimeout 前面的var xxx=null是什麼作用?
伊谢尔伦
伊谢尔伦 2017-05-19 10:38:43
0
3
590

第一次發文見諒..
我想做一個效果滑鼠在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>
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回覆(3)
世界只因有你
  1. setTimeout會回傳一個整數id,是計時器編號,事先宣告一個變數自然是儲存編號用了;

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

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

左手右手慢动作

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

某草草

多謝樓上兩位!

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板