设置超时不给出所需的结果
在这里我的函数与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之后评估其结果。