[英]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.