全局变量的命名/格式化标准

时间:2010-11-10 15:35:54

标签: javascript global-variables

JavaScript中全局变量的命名和格式化标准是什么?

例如:

var global_var // ?
var _global_var // ?
var GLOBAL_VAR // ?
var _GLOBAL_VAR // ?
...

注意:我不是在讨论常量,只是简单地说具有全局范围的变量。

5 个答案:

答案 0 :(得分:17)

没有这样的标准。最常见的做法是对所有变量和属性名称使用较低的驼峰情况(例如var fooBarBaz;),而不考虑范围,但这绝不是普遍的。唯一的例外是大写要用作构造函数的函数的名称:

function SomeClass() {}

var someClassObj = new SomeClass();

我还看到用于变量的块大写和下划线,作者认为是常量,或者是所有全局变量:

var EARTH_RADIUS = 6378100;

另一个相当常见的惯例(虽然不是我自己使用的)是为作者希望被下划线视为私有的对象的属性加上前缀:

this._leaveThisAlone = "Magical property";
道格拉斯·克罗克福德(Douglas Crockford)几年前发表的his own take on JavaScript code standards报道了大部分内容,但一如既往,这只是一个人的意见,所以需要一点点盐。

答案 1 :(得分:4)

如果你需要使用全局变量,重新考虑设计的必要评论,等等等等......

我见过的全局变量通常以ggbl为前缀。有时会使用下划线修改此内容:_g_gbl。 IIRC,当“全球”局限于某个范围而非“真正”全球化时,使用了下划线。

如果要以一切不能使用变量的方式使用全局变量,我会使用下划线。在javascript(IIRC)中,使用下划线作为前缀的约定意味着该变量是“私有的”或不应该在外部使用。如果您正在以一种每个人都应该能够访问和修改的方式声明它,那么我只使用前缀而不是下划线。

答案 2 :(得分:0)

One big reason people would tell you to not use global variables is to avoid interfering with other scripts and/or libraries.

A convention I started using when I need to use a global variable is to add my last name - this way I know I won't interfere with any libraries' or outside scripts' global variables. (Though I have a fairly unique last name - this might not work if you're a Smith).

So my global variables would be named:

var foo_lastnameGlobal;
var bar_lastnameGlobal;

I should point out (in case it isn't clear) this is just a personal convention, not a common or widely used one. It also helps me remember what my global variables are when I do use them. I suppose it might not be so great for public code or in a professional group work environment.

答案 3 :(得分:0)

我认为这样做有两个目的。

执行此操作的第一个原因是能够在给定时间发现绑定到全局对象(通常是窗口或全局)的全局状态变量。问题是,无论您多么严格,都只有两种可行的方法来解决此问题。首先是创建一个全局变量,以按名称跟踪全局变量,并承诺在添加/删除全局变量时始终对其进行更改,其次是保留全局初始状态的副本,并确定要添加,删除的属性,或自开始以来已更改。

这样做的第二个原因是在代码中强调它有意与全局状态进行交互。在这种情况下,与添加注释或显式指定全局对象(而不是隐式地这样做)相比,这样做没有任何标准的好处。

如果您决定更改在文件或项目之间表示常量的方式,则代码中的注释不一致会受到很多惩罚。有很多符号可供选择,它们都以一种或另一种方式失败,要么通过混淆变量名及其自然字母顺序,要么添加其他引用开销。

就个人而言,如果有疑问,我喜欢坚持使用Linux Kernel coding style,我发现它足以解决许多问题。

  

C是斯巴达语,所以您的命名也应该如此。与Modula-2不同   和Pascal程序员,C程序员不会使用像   ThisVariableIsATemporaryCounter。 C程序员会称其为   变量tmp,更容易编写,而且至少   很难理解。

     

但是,尽管不区分大小写,但描述性名称   因为全局变量是必须的。调用全局函数foo是一个   射击。

     

全局变量(仅在确实需要它们时才使用)需要   具有描述性名称,全局功能也具有描述性名称。如果有功能   计算活跃用户的数量,您应该称其为   count_active_users()或类似名称,您不应将其称为cntusr()。

     

将函数的类型编码为名称(所谓的匈牙利语   符号)被大脑破坏了-编译器仍然知道类型,并且   可以检查它们,这只会使程序员感到困惑。难怪   MicroSoft制作越野车程序。

     

LOCAL变量名称应简短明了。如果你有   一些随机整数循环计数器,可能应该称为i。   如果没有机会,则将其称为loop_counter是非生产性的   被误解了。同样,tmp几乎可以是任何类型的   用于保存临时值的变量。

     

如果您害怕混淆本地变量名称,则可以   另一个问题,称为功能增长激素失衡   综合症。请参阅第6章(功能)。

答案 4 :(得分:-2)

如果您希望employeeID成为全局变量,那么正确的方法是声明为 window.employeeID = 5; 然后在稍后访问的所有位置使用window.employeeID。