设置超时不给出所需的结果

在这里我的函数与setTimout调用刚刚点击后立即调用,但我希望它点燃10秒的点击

$('#switchsubjects').click(function(e) { i++; var x=$('#subject-class-switch').html(); if(i<2) { $(this).append('
  • Class
  • Subjects
'); e.stopPropagation(); setTimeout(rm(),10000); } else { $('#dcl').remove(); i=0; } }); function rm() { console.log("working"); $('#dcl').remove(); i=0; }

试试这个:

 setTimeout(rm ,10000); // note no parentheses after rm 

setTimeout()函数要求第一个参数是函数引用(或字符串,但字符串几乎总是错误的选择)。 通过说rm()你实际上是在那个时候调用rm函数并将其返回值传递给setTimeout() (在这种情况下,返回值是undefined )。 如果传递rm而没有通过对函数的引用的括号,则setTimeout可以在您指定的延迟之后调用。

MDN的doco非常适合更多信息和其他示例。

您不理解函数调用和函数引用之间的区别。 假设你有这个function

 function myFunction() { // some code } 

然后这是一个即时函数调用

 myFunction() 

这是一个function参考

 myFunction 

setTimeout的第一个参数必须是函数引用(或包含javascript代码的字符串,但不推荐使用)。

 setTimeout(rm, 10000); 
 setTimeout("rm()",10000); 

否则rm()立即执行,并且仅在10s之后评估其结果。