就拿這個代碼:當沒有引用返回時,範圍是否終止?
var test = (function(){
var name = 'rar';
return function foo(){
console.log('test');
};
}());
foo
被送回test
無需在內部範圍內的任何引用到name
。 name
會發生什麼?它被毀壞了嗎?還是繼續存在並與返回的函數掛鉤,但只是無法訪問?就第一種情況是類似執行以下操作,彷彿name
從來沒有方程式?:
var test = function foo(){
console.log('test');
};
這裏的一部分是另一種情況:
var test2 = (function(){
var name = 'rar';
var age = '20';
return function foo(){
console.log(age);
};
}());
age
得到由foo
引用,將形成一個封閉。但是,name
仍然沒有被任何引用。在這種情況下name
會發生什麼?它被毀壞了嗎?還是繼續存在並與返回的函數掛鉤,但只是無法訪問?
http://stackoverflow.com/a/864549/2269749 – BlitZ
@CORRUPT答案似乎表明發生什麼取決於實施。這意味着,在最糟糕的情況下,「名稱」會保留,是嗎? – Joseph
是的。瀏覽器有不同的JS GC引擎,在這種情況下,每個引擎可能會有不同的表現考慮'name = null'作爲選項,以防止內存泄漏。 – BlitZ