除非你需要通過字面創建後對obj
執行操作時,有沒有區別,它只是一種主觀的風格偏好。 (請注意,所述用途可能是代碼,或者在調試過程中,更多的下文。)
因此,例如,這裏有一個真正實用的區別:
Class.prototype.fn = function() {
var obj = {
subordinate: {
foo: function() {
if (obj.flag) {
doOneThing();
}
else {
doSomethingElse();
}
}
}
};
return obj;
};
在那裏,你所需要的名字,這樣obj.subordinate.foo()
作品。 (不是說我會主張這樣做,但是這是一個當客觀而非主觀區分的例子。)但是除非在初始化之後和返回之前使用它,否則這只是一個主觀的事情。
當然,這種使用不一定在代碼。調試時,如果您需要在返回之前檢查返回的內容,則帶有obj
變量的表單可能更有用。
也許會有點越野滑雪在這裏,但我認爲它的相關:與你的問題的例子,是一個真正的,實際的,有形的這種區別:
Class.prototype.foo = function() {
…
};
Class.prototype.bar = function() {
…
};
這:
(function() {
function Class_foo() {
…
}
function Class_bar() {
…
}
Class.prototype.foo = Class_foo;
Class.prototype.bar = Class_bar;
})();
...這不同之處在於前者的功能沒有名字(屬性指的是他們做的,但而不是功能本身)。在後一種情況下,functions have real names可以幫助您通過顯示調用堆棧中的名稱,斷點列表等來幫助您。
個人而言,我不喜歡只有一次使用的變量。你爲什麼認爲第一種方式更清楚?當你看到'return {'你知道你正在返回一個對象。 – nnnnnn
@nnnnnn:那麼,在調試器中單步執行代碼之前,總會希望在返回結果對象之前檢查它。 –
@ T.J。 - 的確如此,我幾乎提到過,有必要在前一天做這件事,但是我仍然發現,如果我調試了一些東西,暫時在這種情況下暫時放置一個單一用途的變量(特別是在JS通常不需要重建項目的小改動)。同一天,我發現自己正在調試別人的代碼,包括一些相當長的函數,我不得不仔細檢查一下哪些變量只用於在一行或兩行聲明和賦值中使用過一次。 – nnnnnn