簡體   English   中英

為什么出現此“ Uncaught ReferenceError:未定義速度”錯誤?

[英]Why this “Uncaught ReferenceError: tempo is not defined” error?

我有以下代碼:

$("#avvia_cronometro").click(function() {
    var tempo = setInterval(function() {
        cronometro();
        $("#tempo_cronometro").html((h)+":"+(min)+":"+(sec));
    }, 1000);
});
$("#stop_cronometro").click(function() {
    clearInterval(tempo);
});

function cronometro() {
    if (sec == 59) {
        min +=1;
        if (min == 59) {
            h+=1;
            min=0;
        }
        sec=0;
    }
    sec+=1;
}

當我單擊#stop_cronometro它不起作用,並顯示:

Uncaught ReferenceError: tempo is not defined

我該如何解決?

如果單擊#avvia_cronometro它會從時間開始,因此可以正常工作。

好吧,發生這種情況的原因是,在單獨的函數內部的變量作用域,當在函數內部聲明變量時,僅對自身和子函數是必需的。

在這種情況下,我建議您將“速度”變量設置為全局變量:

var tempo = null;
$("#avvia_cronometro").click(function() {
    tempo = setInterval(function() {
        cronometro();
        $("#tempo_cronometro").html((h)+":"+(min)+":"+(sec));
    }, 1000);
});
$("#stop_cronometro").click(function() {
    clearInterval(tempo);
});

function cronometro() {
    if (sec == 59) {
        min +=1;
        if (min == 59) {
            h+=1;
            min=0;
        }
        sec=0;
    }
    sec+=1;
}

因為在全局范圍(或​​停止點擊處理程序可以到達的任何范圍)中不存在可變tempo

當在函數內部使用var聲明變量時,該函數返回時該變量將被刪除:

function foo () {
    var bar = 1;
}
foo();
console.log(bar); // uncaught reference error - "bar" doesn't exist

如果需要全局變量,請在不使用var情況下使用它:

function foo () {
    bar = 1;
}
foo();
console.log(bar); // prints 1

但是,我通常不建議這樣做,因為這對於將來的維護者來說似乎是一個錯誤。 而是在全局范圍內顯式聲明全局變量,以清楚地表明您的意圖:

var bar = null;
function foo() {
    bar = 1;
}
foo();
console.log(bar); // prints 1

因為您正在清除間隔后才開始執行。 處理if中未定義的速度。 SetInterval是一個異步調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM