javascript - Welche Rolle spielt var xxx=null vor der verzögerten Ausführungsfunktion setTimeout?
伊谢尔伦
伊谢尔伦 2017-05-19 10:38:43
0
3
563

Entschuldigung, dass ich das zum ersten Mal poste.
Ich möchte einen Effekt erzielen, nachdem die Maus zwei Sekunden lang auf p bleibt. Er wird nicht länger als zwei Sekunden ausgeführt.
Dann habe ich festgestellt Die setTimeout-Funktion online und erfolgreich gelöst, weil ich Autodidakt bin. Daher ist mein Fundament schwach und ich muss einige Dinge erklären, die ich nicht verstehe

Im Code sind insgesamt drei Fragen kommentiert, vielen Dank!

Code:

<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伐。

Antworte allen(3)
世界只因有你
  1. setTimeout会返回一个整数id,是计时器编号,提前声明一个变量自然是存储编号用了;

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

  3. 这里的if主要是严谨,在setTimeout成功返回计时器编号(因为初始是null,如果没返回肯定就false了)的情况下,才会执行clearTimeout(timer)这句,避免前边执行错误时继续执行错误代码。

左手右手慢动作

首先,setTimeout定时器在使用后会进行clear清除,为了能知道该清楚哪个定时器,因此要加上一个变量,也就是定时器变化。
其次,函数作用域。function外部无法直接访问内部变量,因此要在function外部定义一个变量供给不同function使用。
最后if(timer)主要就是避免timer已经关闭的情况下再去触发clear报错的情况了。

某草草

多谢楼上两位!

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage