创建变量后,对定义的变量是坏的/好的/可选的

Is bad/good/optionnal to defined vars after created them?

本文关键字:变量 好的 创建 定义      更新时间:2023-09-26

阅读许多JavaScript库的代码,我看到许多开发人员在创建变量后立即设置变量。

var i = 0,
var c = 0;

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

var i,
    c;
i = 0;
c = 0;

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

这是纯粹的风格。有些人喜欢将他们的声明与初始化隔离开来,而另一些人则喜欢在一个初始化中完成。对于 JavaScript 引擎来说,它们实际上是相同的,因为它在函数实际执行的第一行代码之前处理var。(请注意它与其他一些语言有何不同。也就是说,它从字面上看,它以相同的方式对待您的两个示例:首先它使用值 undefined 创建 ic,然后当它开始执行函数的分步代码时,它才会将i设置为 0,然后将c设置为 0。(这在规范的第 10.4.3 节和第 10.5 节中有深入介绍。

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

另一方面,将它们分开的一个原因是它给了你足够的空间来评论它们。

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

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

var i;
... code ...
if(b==something){
    i = somevalue;
}
... code ...
a = i + b;

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

但是,如果在定义初始值后直接设置初始值,则不会有任何区别。就像其他人说的那样,这是为了紧凑性以及良好的可读性和风格。

我认为这是一个偏好问题。 我都用过。 对于复杂的代码,第二个示例更好,只要编码人员使用描述性变量名称即可。 我喜欢把它看作是告诉读者我将使用这些变量,所以要注意它们。

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

您甚至可以使用此样式:

var a = b = 0;

初始化定义中的变量可防止因变量未设置且初始 JavaScript 默认值为 undefined 而导致的错误。