iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 14
1
Modern Web

JS讀書筆記系列 第 14

JS讀書筆記30天 - Day14 記憶體與環境

JavaScript的執行環境

當載入一個JavaScript檔案時,便建立了一個JavaScript環境。

所以不同的網頁中,宣告的變數、建立的函式都不可共用,因為每個網頁的程式碼,都是獨立的JavaScript環境。

JavaScript的執行步驟

STEP1:建立執行環境

將window、this⋯⋯等部分建立好,不同的網頁,變數、函式⋯⋯都不可共用,因為是不同的環境。

STEP2:創造階段

創造階段會經歷幾個步驟:

  1. 解析程式碼

  2. 由瀏覽器內的編譯器編譯

  3. 確認編譯正確

  4. 轉換玩瀏覽器可以執行的程式碼

STEP3:執行階段

逐行執行已編譯過且沒有問題的程式碼。

創造階段與執行階段的程式碼變化

當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;

但如果變數改變了值,就會重新開啟一個新的記憶體空間,重新將變數指向到該新記憶體空間。

而之前儲存值的記憶體空間,就會被瀏覽器回收,並且銷毀。


上一篇
JS讀書筆記30天 - Day13 Ajax
下一篇
JS讀書筆記30天 - Day15 陳述式與表達式
系列文
JS讀書筆記30

尚未有邦友留言

立即登入留言