javascript - setInterval 仅触发一次

标签 javascript setinterval

我正在尝试创建一个自包含的计时器,其中所有变量都位于一个对象内。

在大多数情况下,它可以工作,但我可以让它触发一次。我错过了什么?

    function Countdown()
    {
        this.appId = null;
        this.timerId = null;
        this.seconds = null;

        this.decrementCounter = function (instant)
        {
            if (instant == null)
                return;

            instant.tick();
            if (instant.seconds === 0)
            {
                instant.tickEnd();
                instant.stop();
            }
            instant.seconds--;
        };
        this.tick = function ()
        {
            var xx = this.appId
        };
        this.tickEnd = function ()
        {
            var xx = this.appId
        };
        this.start = function ()
        {
            clearInterval(this.timerId);
            this.timerId = setInterval(this.decrementCounter(this), 1000);
        };
        this.stop = function ()
        {
            clearInterval(this.timerId);
        };
    }

最佳答案

我稍微修改了您的代码,并将包含 setInterval 的行更改为:

this.timerId = setInterval((function(scope) {
  return function() {
    scope.decrementCounter(scope);
  };
})(this), 1000);

函数在setInterval内部运行,在window范围内运行。它只运行一次,因为您不会仅传递函数本身的结果。您需要返回实际的函数或传递调用它的匿名函数。

jsfiddle 演示:http://jsfiddle.net/2gLdL/1/

关于javascript - setInterval 仅触发一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24542207/

相关文章:

javascript - 如何在 DHTMLX 网格版本 6 中添加自定义列

javascript - SetInterval 函数中的这个递归调用是如何工作的?

javascript - setInterval 调用中的参数之间的差异

JavaScript:clearInterval不会清除间隔

javascript - Typescript 中的 setInterval 和 setTimeout

javascript循环遍历数组并访问键: value

javascript - 嵌套元素(Web 组件)无法获取其模板

javascript - jQuery-steps:禁用点击提交

javascript - 我如何从 JavaScript 和 Grails 访问变量?

javascript - 如何将 intervalID 传递给 javascript 中的间隔函数?