好奇為什么會發生這種情況
if(typeof TEST === "undefined") {
var TEST = true;
console.log(TEST);
}
如果我放在控制臺中,如果我再次在控制臺中添加它回傳真,然后沒有顯示控制臺日志,這正是我認為它應該作業的方式。
當我放入間隔時,為什么它會繼續記錄變數,即使它已定義?
setInterval(function(){
if(typeof TEST === "undefined") {
var TEST = true;
console.log(TEST);
}
}, 1000);
如何讓它在定義后停止顯示日志?不清除間隔
uj5u.com熱心網友回復:
如果將它放在控制臺中,則var在頂級范圍內創建一個變數。它是未定義的,所以你給它賦值為 true。如果您再次將其放入控制臺,則它true來自上一次。
如果你把它放在一個函式中,那么它的作用域就是這個函式,所以每次你運行這個函式時,你都會創建一個新的作用域和一個新的var TEST.
而是在函式外部的范圍內宣告變數。
uj5u.com熱心網友回復:
在第一種情況下,您正在測驗全域變數。一旦定義,它就保持定義。
在第二種情況下,該變數是回呼函式的區域變數。每次呼叫該函式時,它都是一個尚未定義的新變數。
如果洗掉版本中的var宣告,setInterval()它將分配給全域變數,并且將保持定義狀態。
uj5u.com熱心網友回復:
最簡單的解決方案可能是使用let或const代替var。如果你當然有可能。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/364982.html
標籤:javascript 查询
