JavaScript進階程式設計-變量作用域和記憶體問題
- 4.1.☆基本類型和引用類型的值
- 4.2執行環境及作用域
-
- 簡述
- 4.3垃圾收集
4.1.☆基本類型和引用類型的值
- 變量包含兩種不同資料類型的值:
-
- ① 基本類型值
- 按值通路,可直接操作儲存在變量中的實際的值 。undefined null boolean number string
-
- ① 引用類型值
- 儲存在記憶體中的對象,不允許直接通路, 按引用通路
4.1.1動态的屬性 - 隻能給引用類型值動态添加屬性
var person=new object();
person.name='nicky';
- 4.1.2複制變量值
-
複制基本類型值,各自獨立
複制引用類型值,兩個變量引用同一個對象,是一個指針
4.1.3傳遞參數 -
通路變量的值和引用兩種方式。
但是,所有函數的參數都是按值傳遞。
注意:不要在函數内部重寫對象或者參數,因為局部對象在函數執行後會銷毀。函數都是局部變量
4.1.4檢測類型 -
基本資料類型:typeof
引用資料類型:
person instanceof array
所有引用類型的值都是object的執行個體,基本類型不是對象。
4.2執行環境及作用域
簡述
執行環境是JS最為重要的一個概念
全局執行環境:被認為是window對象(第七章),關了應用程式才能銷毀。
函數執行環境:每個函數都有自己的執行環境,執行函數即環境進棧
作用域按照自己的了解即可,下一層的可通路上一層的變量,反之不可。即局部域可通路全局變量,反之不可。
- 4.2.1:延長作用域鍊
- try-catch語句中的catch塊: 建立一個新的變量對象,其中包含的是被抛出的錯誤對象的聲明。 4.2.2:沒有塊級作用域
-
for循環中建立的變量i不會結束銷毀
①聲明變量
-
如果初始化變量時沒用var聲明,會自動認為是全局變量。 在初始化變量之前,一定要先聲明。
②查詢辨別符
- 如果局部環境中存在與全局環境中的同名的辨別符,隻認完局部中的就停止查詢了
4.3垃圾收集
- 自動垃圾收集機制
- 開發人員不必關心記憶體配置設定和回收問題 辨別無用變量的政策
-
①标記清除:給所有變量加标記,環境中在用的變量的标記被去掉,删除剩下
②引用計數:存在循環引用,有bug,已不用
性能問題
- 管理記憶體
- 解除引用:一旦資料無用,将其值設定為null來釋放其引用。讓值脫離執行環境,以便垃圾收集器下次運作時自動回收