2012-07-25 68 views
2

一個JS大師在那裏可以解釋爲什麼這:JavaScript對象/關閉

$$={} 
(function(x){ 
    x.newModule = { 
      func: function(){...} 
    }; 
})($$); 
$$.newModule.func() 

優於呢?

$$.newModule = { 
    func: function() {...} 
} 
$$.newModule.func() 
+2

你對上級有什麼意思? – 2012-07-25 03:26:20

回答

7

額外的功能給你一個額外的本地範圍,你可能想使用(儘管它不在你的簡短例子中)。

(function(x){ 
    var privateFunction = function() {}; 
    var privateCounter = 1; 
    x.newModule = { 
      func: function(){...} 
    }; 
})($$); 
+0

ah yes ..謝謝 – 2012-07-25 03:56:16

+0

另外,'x'只能在'$$'上保存一個字符,但現實世界的例子可能有'x'和'myNamespace.mySubNamespace.someObject',所以如果你需要反覆引用這個對象添加多個方法和/或屬性,使其具有單字符別名,使代碼更整潔,更易於閱讀。 – nnnnnn 2012-07-25 04:37:38

+0

@nnnnnn:模塊作者可能與模塊用戶不同,並且使用這種「導出」式語法,每個人都可以選擇她自己喜歡的名字。 – Thilo 2012-07-25 05:17:13

0

在第一種模式中,您可以擁有在第二種模式中不可行的私有方法和變量。這是第一種模式優越的原因。