2.另外再js執行過程,若是跑到function內發現使用沒有宣告的變數,他是會往外global VO 進行搜尋嗎?
let a = 1 ;
function test() {
console.log(a);
}
test();
例如這段EC執行test function時,VO應該找不到變數a的宣告,所以查找上一層global VO?
新手學習JS Execution Context,有點亂,再感謝各位大大指教><
let 與 var的作用域性質是一樣的。
差別在於,var 可在重新宣告。但let是不行的。
javascript 的作用域性質比較特殊。
整塊區塊內都會有作用。
再來你說的 const 。
它是一種很特殊的特性。
一般在程式的說法常常是叫他常數宣告。
所謂的常數就是不可在變動的值。
所以你說的「理論上不是應該和const一樣,出現未初始化錯誤嗎?」
的論點是不一樣的東西。
就正規來說
let a;//這樣是可以的。
const b;//這樣是不行的。
const c=10;//這樣是可以的
a=1; //let var 都算是變數。所以可以改變
c=10; //這邊會錯。因為常數不可改變
但 javascript 的 const 有個特性。
雖然說常數值不可改變沒錯。
但如果是宣告一物件式的常數
則其物件內的值變動是不會報錯的。
const c={name:'test',id:1};
c.name = 'test2';//這樣是沒事的。
嗨~
路過看到,發現第一句似乎怪怪的。
let 與 var的作用域性質是一樣的。
據我所知,這兩個應該不太一樣。
(但因為我都沒用 var
,所以對他不算熟悉。)
記憶中:let
const
都是以 {}
block 為界線。var
是只有 function
與 全域 有區隔。
我也記得作用域var是function/global有區隔,
其實我的第2個問題只是想確定,如果function內沒出現定義var,js應該會往外尋找global var變數....?
如果有錯再請大大們指導
hi
認真來說,你們說的也是對的。
但我說的其實並不是錯的。
let 與 var 的初始作用域是相同的。
唯一不同的是,var可在區塊內再宣告一個私有的。
let 與 var 。作用域都是包在一個區塊內。
但 let 宣告的,無法在其子域內再做一次let宣告。會爆錯誤。
var可在其子域再宣告一次var。
而會有各自不同的領域。
也有人提到 global 。
只是這在 javascript 來說。其實並沒有所謂的 global 。
只有全覆蓋及子覆蓋的觀念。
所以,就現今的寫法而言。
已經不建議用var宣告的原因是有其意義的。
畢竟它是可以再覆蓋。或是可解釋為再一次私域宣告。
這樣對程式而言來說。容易發生不容易除錯判斷的問題存在。
javascript的變數領域是很奇特的解釋。
一但習慣了後端語言的變數領域後。
會覺得javascript的變數領域很奇特。
多加一個知識。在javascript裏。if跟for都算是一個獨立的區塊。
可試試以下的寫法。看最後會出現什麼。然後再去理解
let i=0;
for(var i=0;i<=10;i++){
console.log(i);
}
console.log(i);