[英]Why cannot access to variable inside function that assigned jquery object
[英]Why I cannot access this variable inside this simple function?
我是 Javascript 新手,我不明白范圍在以下代碼中是如何工作的:
//Code n°1:
let num = 1;
function test(){
console.log(num);
}
test() //As I expected I get in console "1"
//Code n°2:
let num = 1;
function test(){
let num = 2;
console.log(num);
}
test() //As I expected I get in console "2"
但問題是:
//Code n°3:
let num = 1;
function test(){
console.log(num)
let num = 2;
console.log(num);
}
test() //I expected to get in console "1" and then "2" but instead I get an error.
當我在瀏覽器中運行代碼 n° 3 時,我收到此錯誤:未捕獲的 ReferenceError:在初始化之前無法訪問詞法聲明 'num'
如果我查看代碼 1 和 2,我想在運行代碼 3 后,我將在控制台中獲得數字 1,然后是數字 2。但這並沒有發生。 為什么?
非常感謝!
JavaScript 異常“在初始化之前無法訪問詞法聲明‘變量’”發生在詞法變量在初始化之前被訪問時。 這發生在任何塊語句中,當 let 或 const 聲明在定義之前被訪問時。
當“測試函數”被調用時,函數體被執行。 當它到達 'console.log(num)' 時,它開始在測試函數 scope 中搜索 'num variable declaration'(或 'num assignment' 或 'num reassignment)。 所以它在下一行找到變量聲明。 搜索變量的優先級是:
因此,當在當前范圍內找到變量聲明時,不會繼續搜索范圍鏈。 (它不會在全局范圍內搜索 num 變量。)
我想這就是錯誤的原因,但由於我是 javaScript 的新手,我不完全確定。
如果你在沒有重新聲明的情況下初始化變量,它會正常工作,現在如果你重新聲明變量,那么這個錯誤將發生在let或var ,因為在同一范圍內,它被之前的console.log()調用。 不建議你重新聲明let變量,如果你需要,不要在前面的語句中使用相同的,注意如果你在第一個console.log()上注釋,代碼會再次工作,這正是發生對於此范圍內變量的生命周期,在這種情況下,讓
let num = 1; function test(){ console.log(num) let num = 2; console.log(num); } test()
因為 JavaScript 中的函數和用 var 聲明的變量被提升,移動到函數/詞法塊的頂部。
但是讓關鍵字尊重詞匯流。 它在聲明變量的地方固定變量。
console.log 嘗試訪問流中聲明的變量。 因此,手動將您的 let 聲明移至 de console.log 之上或將其更改為 var let num = 2; 讓 javascript 引擎首先自動移動它。
var num = 1;
function test(){
let num = 2;
console.log(num);
}
test()
或者
var num = 1;
function test(){
console.log(num)
var num = 2;
console.log(num);
}
test()
或者,要訪問全局 var num,它被來自測試主體、var 或 let 的聲明所掩蓋,無論
var num = 1;
function test(){
console.log(num)
//let num = 2;
console.log(num);
}
test()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.