0

我找到了这个区间函数,并且一直在我的网站上使用它。但是,我需要从间隔中获取总持续时间。我尝试对其进行修改,以便可以调用 timer.total_duration 来获取总时间,但是当我尝试运行修改后的代码时,我收到一条错误消息,提示“未捕获的 TypeError:数字不是函数”,修改后的函数是:

function interval(duration, fn) {
    this.baseline = undefined
    this.total_duration = 0.0

    this.run = function () {
        if (this.baseline === undefined) {
            this.baseline = new Date().getTime()
        }
        fn()
        var end = new Date().getTime()
        this.baseline += duration

        var nextTick = duration - (end - this.baseline)
        if (nextTick < 0) {
            nextTick = 0
        }
        this.total_duration += nextTick //line giving the error
        (function (i) {
            i.timer = setTimeout(function () {
                i.run(end)
            }, nextTick)
        }(this))
    }

    this.stop = function () {
        clearTimeout(this.timer)
    }
}

知道为什么我会收到此错误,以及如何解决它以便获得总持续时间吗?

4

1 回答 1

2

分号!它们不是可选的!

如果您不输入,口译员会为您输入。或者在某些情况下无法将它们放在您期望的位置。

这段代码:

this.total_duration += nextTick //line giving the error
(function (i) {
    i.timer = setTimeout(function () {
        i.run(end)
    }, nextTick)
}(this))

就像这段代码一样被解析:

this.total_duration += nextTick(function (i) {
    i.timer = setTimeout(function () {
        i.run(end)
    }, nextTick)
}(this))

nextTick是一个数字,而不是一个函数,所以它显然不能被调用。

你要这个:

this.total_duration += nextTick; // <-- the semicolon that fixes your stuff
(function (i) {
    i.timer = setTimeout(function () {
        i.run(end); // <-- semicolon! end of statement
    }, nextTick); // <-- semicolon! end of setTimeout()
}(this)); // <-- semicolon! end of anonymous function invocation

您最好在每条语句的末尾添加分号。您未来的调试器会感谢您。

于 2013-01-08T20:54:04.127 回答