ECMAScript 變量:
1.基本類型值(簡單數據段)
2.引用類型值(可能由過個值構成的對象) → 保存在內存中的對象
------
動態屬性: 只能給引用型值動態添加新屬性,以便將來使用。
------
複製變量值:
基本類型值的複制→ 在變量對像上創建一個新值→ 複製給新變量(互不影響)
引用類型值的複制→ 將存儲在變量對像中的值複製到新變量分配空間中(複製的是一個指針,指向同一個對象,相互影響)
------
傳遞參數:
ECMAScript中所有函數的參數都是按值傳遞。
(函數外部的值複製給函數內部的參數。
→ 可以把ECMA函數的參數想像成局部變量。 )
原因解釋:
說法一:
函數參數是一種局部變量,在外部值傳遞給函數參數,內部外部互不影,引用傳遞複製的是地址,所以他內務外部相互有影響。
說法二:對象角度(參數是一個對象obj)
------
對象按值傳遞→ 參數對象和外部對象引用同一個對象→ 外部對象指向的對像在堆內存中只有一個,且是全局變量。
不要錯認為是在局部作用在修改的對像在全局作用域(外部)反映出來的結果→ 函數內部的局部變量在函數執行完會立即銷毀。
------
執行環境(有時候也簡稱“環境”)及作用域
執行環境定義了白或函數有權訪問其他數據決定了他們各自的行為→ 每個執行環境都有一個與之關聯的變量對象→ 環境中定義的所有變量和函數都保存在這個對象。
------
每個函數都有自己的執行環境→ 當執行流進入一個函數時→ 函數環境會被推入一個環境棧中→ 在函數執行後將其彈出→ 把控制權返回給之前的執行環境
代碼在一個環境執行中時,會創建變量對象的一個作用域鏈(scope chain)
作用域鏈用途:保證對執行環境有權訪問的所有變量和函數的有序訪問。
作用域鏈的前端,始終都是當前執行的代碼所在環境的變量對象
------
內部環境可以通過作用域鏈所有的外部環境,但是外部環境不能訪問內部環境(環境的聯繫是線性的,有次序的→ 向上搜索作用域鏈以查詢變量和函數名)
函數參數也被當做變量來對待
------
延長作用域鏈:
有些語句可以在作用域的前端鏈臨時增加一個變量(變量在代碼執行後移除)
1.try-catch語句的catch塊
2.with語句
------
Javas沒有塊級作用域
這裡可以再簡單區分一下塊級作用域和函數作用域
以上這篇關於JS變量和作用域詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。