JavaScript中全局变量的命名和格式化标准是什么?
例如:
var global_var // ?
var _global_var // ?
var GLOBAL_VAR // ?
var _GLOBAL_VAR // ?
...
注意:我不是在讨论常量,只是简单地说具有全局范围的变量。
答案 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)
如果你需要使用全局变量,重新考虑设计的必要评论,等等等等......
我见过的全局变量通常以g
或gbl
为前缀。有时会使用下划线修改此内容:_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。