2013-11-26 96 views
0

使用立即調用的函數表達式創建對象時,使用內部對象引用還是外部對象引用有什麼實際區別?例如:IIFE在內部返回對象引用的內部或外部對象?

var external = (function(){ 
    var internal = {}; 
    internal.a = function(){ 
     //... do stuff 
    } 
    internal.b = function(){ 
     internal.a(); 
     //^OR v 
     external.a(); 
    } 
    return internal; 
})(); 

兩者都有效。我可以想到的唯一區別可能是internal在被調用後被清除,如果沒有直接調用它的話,但這可能是沒有意義的,因爲同一個對象居住在external。如果有重複,請原諒我 - 我無法清楚地說出我想要知道的關於搜索引擎的知識,以便給我一個明確的答案。

謝謝!

回答

3

他們是完全一樣的事情(如@Pointy指出的那樣,他們是同樣的事情,直到有人在外面改變external,但它只是感覺怪怪的使用這裏external,這是不是很清楚,因爲你在它自己的定義裏面使用它。

+0

它們是一樣的東西,直到有些東西改變'external'的值... – Pointy

+0

@Pointy我同意,好點:)。編輯回答,以包含您的評論。謝謝。 –

+0

如果我引用'internal'和稍後在'external'上引用的某些更改會發生什麼?它仍然指向原來的「內部」值還是指向新的「外部」值? –

1

一個有趣的區別是對external的引用將意味着包含外部聲明的詞法作用域將被鎖定在對象內部。這可能被解釋爲內存泄漏,取決於對象發生了什麼。

+0

希望我可以接受這兩個。很好的解釋。 –