0

このインターバル関数を見つけて、自分のウェブサイトで使用しています。ただし、間隔から合計期間を取得する必要があります。timer.total_duration を呼び出して合計時間を取得できるように変更しようとしましたが、変更されたコードを実行しようとすると、「Uncaught TypeError: number is not a function」というエラーが表示されます。変更された関数は次のとおりです。

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 に答える