JS的兩種變量類型
JS變量可以用來保存兩種類型的值:基本類型值和引用類型值恨溜。兩者具有以下特點(diǎn):
- 前者包括基本的數(shù)據(jù)類型止后,后者包括對象。
- 前者是按值復(fù)制券腔,而后者是按地址引用畔规。
- 確定一個值是哪種基本類型可以使用typeof操作符局扶,而確定一個值是哪種因引用類型可以使用instanceof操作符。
變量作用域
在JS中叁扫,只有兩種作用域详民。并且不存在塊作用域(即大括號括起來的作用域或其他作用域)。
- 全局陌兑,屬于window
- 局部,屬于函數(shù)
垃圾回收
由于計(jì)算機(jī)給瀏覽器分配的內(nèi)存空間很小由捎,一般小于應(yīng)用的分配大小兔综。因此,變量的回收十分重要狞玛。在JS中回收機(jī)制有兩種:
- 標(biāo)記清除:主流的方法软驰,在變量離開作用域時進(jìn)行標(biāo)記。
- 引用計(jì)數(shù):跟蹤記錄所有值被引用的次數(shù)心肪。如锭亏,內(nèi)存中有一個值,對它的引用則計(jì)數(shù)加1硬鞍,若引用變量不再引用(指向其他值或設(shè)置為null)慧瘤,則計(jì)數(shù)減一。等到計(jì)數(shù)為0時固该,則可以在下次垃圾回收時進(jìn)行清除锅减。
缺點(diǎn):引用計(jì)數(shù)存在循環(huán)引用問題。
解決辦法:
對于全局變量伐坏,在使用完畢后將變量“解除引用”怔匣,如指向null即可。對于局部變量不用進(jìn)行相關(guān)操作桦沉,系統(tǒng)會自動解除引用每瞒。