2013-05-31 55 views
6

就拿這個代碼:當沒有引用返回時,範圍是否終止?

var test = (function(){ 
    var name = 'rar'; 
    return function foo(){ 
    console.log('test'); 
    }; 
}()); 

foo被送回test無需在內部範圍內的任何引用namename會發生什麼?它被毀壞了嗎?還是繼續存在並與返回的函數掛鉤,但只是無法訪問?就第一種情況是類似執行以下操作,彷彿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會發生什麼?它被毀壞了嗎?還是繼續存在並與返回的函數掛鉤,但只是無法訪問?

+2

http://stackoverflow.com/a/864549/2269749 – BlitZ

+0

@CORRUPT答案似乎表明發生什麼取決於實施。這意味着,在最糟糕的情況下,「名稱」會保留,是嗎? – Joseph

+0

是的。瀏覽器有不同的JS GC引擎,在這種情況下,每個引擎可能會有不同的表現考慮'name = null'作爲選項,以防止內存泄漏。 – BlitZ

回答

4

在Chrome中,name將被GCed;在FireFox中,name與整個封閉保持一致。 IE瀏覽器?我不知道。

+0

我可以要求提供關於爲什麼Chrome GC「名稱」而不是Firefox的參考? – Joseph

+0

@JosephtheDreamer我沒有任何參考,我的回答完全是基於瀏覽器工作時的觀察。 –

相關問題