第一次發文見諒..
我想做一個效果滑鼠在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>
setTimeout
會回傳一個整數id,是計時器編號,事先宣告一個變數自然是儲存編號用了;為什麼不能在這裡聲明?要知道
var
是函数作用域的,在function
里边声明的变量一出去就没了,你叫另一个匿名函数的clearTimeout
到哪去找這個變數?這裡的
if
主要是嚴謹,在if
主要是严谨,在setTimeout
成功返回计时器编号(因为初始是null,如果没返回肯定就false了)的情况下,才会执行clearTimeout(timer)
成功回傳計時器編號(因為初始是null,如果沒回傳肯定就false了)的情況下,才會執行clearTimeout(timer )
這句,避免前邊執行錯誤時繼續執行錯誤代碼。首先,setTimeout定時器在使用後會進行clear清除,為了能知道該清楚哪個定時器,因此要加上一個變量,也就是定時器變化。
其次,函數作用域。 function外部無法直接存取內部變量,因此要在function外部定義變數供給不同function使用。
最後if(timer)主要是避免timer已經關閉的情況下再去觸發clear報錯的情況了。
多謝樓上兩位!