使用Jquery进行setTimeout递归

Yan*_*lan 1 recursion jquery settimeout

我试图在客户端每秒递增一个值,使用jquery
这是做了什么:

<script type="text/javascript">
        $(document).ready(function increment(){
            $("#counter").text(parseInt($("#counter").text())+1);
            setTimeout(increment(),1000)
        })
    </script>
Run Code Online (Sandbox Code Playgroud)

这没有按预期工作,我收到"太多的递归"错误.
有什么想法吗?

Rus*_*Cam 12

尝试

$(document).ready(function () {       
    function increment(){
        $("#counter").text(parseInt($("#counter").text())+1);
        setTimeout(increment,1000);
    };            
    increment();
});
Run Code Online (Sandbox Code Playgroud)

顺便说一下,setInterval()在设定的时间间隔内重复调用一个函数,而不是递归地调用一个函数setTimeout()

$(document).ready(function () {       
    var interval = setInterval(increment,1000);     
});

function increment(){
    $("#counter").text(parseInt($("#counter").text())+1);            
}  
Run Code Online (Sandbox Code Playgroud)


hob*_*bbs 7

increment()是对增量的调用,而不是对它的引用.当您尝试将其设置为再次调用增量时,您实际上是立即再次调用它.如果它返回,它的返回值将传递给setTimeout,但它永远不会,因为它只是一次又一次地调用自己,直到你得到一个深度递归错误.

解决方案只是删除括号,以便您引用函数增量,而不是调用它.