通过另一个函数调用时,clearTimeout()不起作用

时间:2017-05-02 02:03:13

标签: javascript

clearTimeout(fun);函数下面添加setTimeout时,它可以正常工作,但我无法遇到此代码的错误。

<!DOCTYPE html>
<html>
   <body>
    <button onclick="myFunction()">Try it</button>
    <button onclick="myfunction()">click me</button>
    <script> 
       function myFunction() {
          var fun = setTimeout(function(){ alert("Hello"); }, 3000);
       }
       function myfunction(){
          clearTimeout(fun); 
       } 
   </script>
  </body>
</html>

2 个答案:

答案 0 :(得分:7)

myFunction作为变量在第二个myFunction内无法访问,因为它是第一个fun范围内的变量。 <script> var fun; function create() { fun = setTimeout(function(){ alert("Hello"); }, 3000); } function cancel(){ clearTimeout(fun); } </script> 需要全局声明 - 或者在两个函数的父级别声明。

<Directory /var/www/FlaskApp/FlaskApp/static/>
        Order allow,deny
        Allow from all
        Options -Indexes
</Directory>

作为附注,函数需要具有唯一的名称,否则第二个声明将覆盖第一个。

答案 1 :(得分:5)

这是因为标识符fun仅包含 在包含的代码块中。

解决方案是您需要在函数之外声明它,这将使您能够在两个函数中使用标识符fun

此外,即使您的函数标识符由第一个'f'区分,但最好为它们提供有意义的标识符,这些标识符可以通过以下方式轻松区分:眼睛。

<!DOCTYPE html>
<html>
   <body>
<button onclick="start()">Try it</button>
<button onclick="end()">click me</button>
<script> 
   var fun;
   function start() {
      fun = setTimeout(function(){ alert("Hello"); }, 3000);
   }
   function end(){
      clearTimeout(fun); 
   } 
   </script>
  </body>
</html>