js的函數名稱既然是函數物件的指針,那麼是引用的是記憶體嗎?
`
var a=function(c){
return ++c;
}
console.log(a(1));
var b=a;
console.log(b(1));
var a=null;
console.log(b);
console.log(b(1));
` ,那麼如何做手動銷毀呢?全域變數是不是需要關閉瀏覽器才會回收?求解謝謝
首先
var a
会在stack
里面开一块空间,然后你将他赋给一个function
,是一个引用类型,于是又在heap
里面又申请一块空间存放function
,此时,stack
里面的a
存放的是function
的地址而下面,將
b
赋值给a
,是将stack
里面a
指向的heap
里面function
的地址赋给b
,所以这就是为什么后来a
指向了null
,但是b
仍然指向之前heap
里面function
的原因。如何銷毀?將
b
也设置为null
或其他數值就好了。所以這種變數盡量不要寫全域的,寫局部變數。是不是引用內存? 這問題有點太寬了, 數據都是放在內存裡的, 自然需要引用內存
但又不止引用內存那麼簡單, 內存只負責存數據, 數據間的關係是沒法體現的, 所以不是直接引用內存
中間是有隱藏處理的, 怎麼操作有基本的理論, 但實際上很少人知道具體的細節, 太底層了
另外, 回收的話有兩種做法:
一般直接用方法1就行, 不必擔心會溢出, 自動回收會有多種觸發, 例如定時, 例如數據達到一定量
雷雷
js用delete可以手動回收變數
關於垃圾回收機制:
在IE舊版本下,DOM是COM對象的形式,採用引用次數計數清除,如果有循環引用的情況,那麼就一直都不會得到釋放內存的機會。
在標準瀏覽器中是標記清除的方法,只需要手動解除將引用設置為null就可以釋放內存了。
如果沒有解除引用,那麼會到離開執行環境時才釋放內存,而全局的變量對像也就得等到全局執行環境退出時才會釋放這部分的內存,即關閉瀏覽器時才會釋放。