除非你需要通过字面创建后对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