當載入一個JavaScript檔案時,便建立了一個JavaScript環境。
所以不同的網頁中,宣告的變數、建立的函式都不可共用,因為每個網頁的程式碼,都是獨立的JavaScript環境。
將window、this⋯⋯等部分建立好,不同的網頁,變數、函式⋯⋯都不可共用,因為是不同的環境。
創造階段會經歷幾個步驟:
解析程式碼
由瀏覽器內的編譯器編譯
確認編譯正確
轉換玩瀏覽器可以執行的程式碼
逐行執行已編譯過且沒有問題的程式碼。
當JavaScript執行後,會進行兩個階段,分別是創造階段,還有後面的執行階段。
創造階段會設定變數到瀏覽器的記憶體中,直到關掉該網頁時,記憶體會被釋放出來。
設定變數時,不是同時賦予值,而是先一一的給變數記憶體空間,這時的變數值都是undefined
。
所以當程式碼是:
var a = 1;
在實際執行時,其實是:
var a;
a = 1;
因此如果加上console.log()
,就會發現:
console.log(a); //undefined
var a = 1;
console.log(a); //1
第一個console.log()
的值是undefined
,因為JavaScript雖然會由上至下執行,但會用JavaScript自己熟悉的方式,所以執行的程式碼順序,並不一定是開發者書寫的順序。
而在JavaScript中,會先宣告變數,由此可知,上面的程式碼執行時,應該是這樣:
var a;
console.log(a); //undefined
a = 1;
console.log(a); //1
JavaScript在使用記憶體時,變數和值並不是在同一個記憶體空間中的。
變數會被給予一個記憶體空間,而值會先儲存在另一個記憶體空間中。
之後,再將儲存變數的記憶體指向到儲存值的記憶體空間,這樣就完成變數的賦值了,也就是兩個步驟:
var a;
a = 1;
但如果變數改變了值,就會重新開啟一個新的記憶體空間,重新將變數指向到該新記憶體空間。
而之前儲存值的記憶體空間,就會被瀏覽器回收,並且銷毀。