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