面試官:在全域性作用域下宣告的變數一定會成為Global物件的屬性嗎?
阿新 • • 發佈:2021-03-23
全域性變數在瀏覽器和Node環境下的區別
我們知道,在JavaScript中宣告的全域性變數,會變成Global物件的屬性。這個Global物件在瀏覽器中為window物件,在Node環境下為global物件。
看下面這段簡單的程式碼:
var name = 'jack'
console.log(this.name) //輸出什麼?
根據上面的分析,顯然會打印出jack。
我們用Chrome試一下。
確實沒錯。
按理說,在Node環境下,應該也是相同的結果。
我們試下:
結果似乎出人意料:同樣的程式碼,在瀏覽器和Node環境下,竟然出現了不同的結果。
從上面的測試程式碼我們可以看出:用 var 宣告的變數,在瀏覽器環境下會成為window物件的屬性,而在Node環境下不會成為global物件的屬性。
那如果用 let 呢?是和 var 表現一樣,還是有所區別?
用 let 宣告的全域性變數不會成為window物件的屬性
《JavaScript高階程式設計》裡寫得很清楚:
與var關鍵字不同,使用 let 在全域性作用域中宣告的變數不會成為window物件的屬性。
例如:
var name = 'Matt'在這裡插入程式碼片
console.log(window.name) // 'Matt'
let age = '26'
console.log(window.name) //undefined
我們也可以直接將window打印出來:
可以看到,window物件裡的確只有用 var 宣告的變數。
總結
- 使用 var 宣告的全域性變數,在瀏覽器環境下會成為window物件的屬性,在Node環境下不會成為global物件的屬性。
- 使用 let 宣告的全域性變數,即便在瀏覽器環境下不會成為window物件的屬性。