1. 程式人生 > 其它 >通用JS12——》變數、作用域與記憶體

通用JS12——》變數、作用域與記憶體

ECMAScript變數可以包含兩種不同型別的資料:原始值和引用值。原始值(primitive value)就是最簡單的資料,引用值(reference value)則是由多個值構成的物件。
六種原始值:Undefined、Null、Boolean、Number、String和Symbol。儲存原始值的變數是按值(by value)訪問的,因為我們操作的就是儲存在變數中的實際值。
引用值是儲存在記憶體中的物件。與其它語言不同,JavaScript不允許直接訪問記憶體位置,因此也就不能直接操作物件所在的記憶體空間。

作用域

作用域就是程式碼的執行環境,全域性執行環境就是全域性作用域,函式的執行環境就是私有作用域,他們都是棧記憶體。
執行環境定義了變數或函式有權訪問的其它資料,決定了他們各自的行為。每個執行環境都有一個與之關聯的變數物件,環境中定義的所有變數和函式都儲存在這個物件中。雖然我們編寫的程式碼無法訪問這個物件,但解析器在處理資料時會在後臺使用它。
全域性執行環境是最外圍的執行環境。根據ECMAScript實現所在宿主環境不同,表示的執行環境的物件也不一樣。

  • 在web瀏覽器中,全域性執行環境被認為是window物件,因此所有全域性變數和函式都是作為window物件的屬性和方法建立的。
  • 在NODE環境中,全域性執行環境是global物件。
    某個執行環境中所有的程式碼執行完畢後,該環境被銷燬,儲存在其中的所有變數和函式定義也隨之銷燬(全域性執行環境知道應用程式退出時,如關閉瀏覽器或網頁,才會被銷燬)
    概括來說:
    作用域就是程式碼執行開闢棧記憶體
  • 私有作用域————》函式執行都會形成一個私有作用域
  • 全域性作用域————》頁面一開啟就回形成一個全域性的作用域
  • 私有變數————》在私有作用域裡面形成的變數
  • 全域性變數————》在全域性作用域形成的變數

作用域鏈

當代碼在一個環境中執行時,會建立變數物件的一個作用域鏈(作用域形成的鏈條)

  • 作用域鏈的- 前端,始終都是當前執行的程式碼所在環境的變數物件
  • 作用域鏈中的下一個物件來自於外部環境,而在下一個變數物件則來自下一個外部環境,一個知道全域性執行環境
  • 全域性執行環境的變數物件始終都是作用域鏈上的最後一個物件
    內部環境可以通過作用域鏈訪問所有外部環境,但外部環境不能訪問內部環境的任何變數和函式

待續!!!