0

阅读许多 javascript 库的代码,我看到许多开发人员在创建变量后就使用它们来设置变量。

var i = 0,
var c = 0;

我更喜欢在创建它们之后定义变量。

var i,
    c;

i = 0;
c = 0;

但是可能有一个解释为什么会这样或那样?

4

5 回答 5

1

这纯粹是风格。有些人喜欢将他们的声明与初始化隔离开来,而另一些人则喜欢将它们合二为一。对于 JavaScript 引擎,它们实际上是相同的,因为它var在函数实际执行的第一行代码之前处理。(注意这与其他一些语言有什么不同。)也就是说,它完全一样地对待你的两个例子:首先它使用 value创建iand ,然后才开始执行函数的逐步代码它设置为 0,然后设置为 0。(这在规范的第10.4.3节和第10.5节中有一些深入的介绍。)cundefinedic

对我来说,只要我坚持简单的价值观,我就喜欢把它们合二为一(虽然我以前一直是一个“纯粹主义者”,把它们分开;我年轻的时候做了很多傻事)。但我尽量避免初始化中的复杂逻辑。有时我发现我已经将一半的函数编写为一系列以逗号分隔的语句var,并且开始变得难以阅读和维护,所以我倾向于在那个时候将它们拉出来。

另一方面,将它们分开的一个原因是它为您提供了足够的空间来评论它们。:-)

于 2012-05-18T14:27:35.017 回答
0

两者都可以,但是如果您在没有初始化变量的情况下定义变量,并在初始化之前使用它们,那么这是不好的做法。

于 2012-05-18T14:27:40.830 回答
0

这是因为他们将使用条件来设置初始值,例如:

var i;

... code ...

if(b==something){
    i = somevalue;
}

... code ...

a = i + b;

当 b 不等于某个值时,变量仍然是未定义的。为了防止这在以后的使用中成为问题,它们为变量提供了一个初始化值。

但是如果你在定义后直接设置初始值,就没有什么区别了。就像其他人说的那样,它是为了紧凑和良好的可读性和风格。

于 2012-05-18T14:30:02.070 回答
0

我认为这是一个偏好问题。我都用过。对于复杂的代码,第二个例子更好,只要编码器使用描述性变量名称。我喜欢将其视为告知读者我将使用这些变量,因此请注意它们。

另一个考虑因素是范围。确保您在正确的范围(全局/类/函数/等)中声明变量。如果您将它们声明得太窄,您会无意中创建两个不同的变量(这可能非常难以调试)。如果您将它们声明得太宽泛,可能会降低程序效率。

于 2012-05-18T14:31:38.837 回答
0

你甚至可以使用这种风格:

var a = b = 0;

在定义中初始化变量可防止因变量未设置且初始 JavaScript 默认值为undefined.

于 2012-05-18T15:02:11.917 回答