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

问题描述 投票:24回答:5

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

例如:

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

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

javascript global-variables
5个回答
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,涵盖了大部分内容,但一如既往这只是一个人的意见,所以需要一点点盐。


4
投票

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

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

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


0
投票

人们告诉你不使用全局变量的一个重要原因是避免干扰其他脚本和/或库。

我在需要使用全局变量时开始使用的约定是添加我的姓氏 - 这样我知道我不会干扰任何库或外部脚本的全局变量。 (虽然我有一个相当独特的姓氏 - 如果你是史密斯,这可能不起作用)。

所以我的全局变量将命名为:

var foo_lastnameGlobal;
var bar_lastnameGlobal;

我应该指出(如果不清楚)这只是一个个人惯例,而不是一个普通或广泛使用的惯例。它还有助于我记住当我使用它们时我的全局变量。我想对公共代码或专业团队工作环境来说可能不是那么好。


0
投票

我认为做这样的事情有两种意图。

做这种事情的第一个原因是能够在给定时间发现绑定到全局对象(通常是窗口或全局)的全局状态变量。问题在于,无论你有多严谨,只有两种实用的方法可以解决这个问题。首先是创建一个全局变量来按名称跟踪全局变量,并提交在添加/删除全局变量时始终更改它,第二个是保留全局初始状态的副本并确定添加,删除了哪些属性,或从一开始就改变了。

做这样的事情的第二个原因是在代码中强调它有意与全球状态交互。在这种情况下,通过添加注释或显式指定全局对象而不是隐式地执行此操作,没有标准的好处。

如果您决定更改表示文件或项目之间的常量的方式,则在代码中使用不一致的表示法会受到很多惩罚。有很多符号可供选择,并且所有符号都会以某种方式失败,无论是通过混淆变量名称还是自然的字母顺序,或者添加额外的引用开销。

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

C是斯巴达语言,您的命名也应如此。与Modula-2和Pascal程序员不同,C程序员不使用像ThisVariableIsATemporaryCounter这样可爱的名字。一个C程序员会调用那个变量tmp,这个变量更容易编写,而且难以理解。

但是,虽然混合大小写的名称不受欢迎,但全局变量的描述性名称是必须的。召唤全球职能foo是一种射击进攻。

GLOBAL变量(仅在您确实需要它们时使用)需要具有描述性名称,全局函数也是如此。如果你有一个计算活动用户数的函数,你应该调用count_active_users()或类似函数,你不应该把它称为cntusr()。

将函数类型编码到名称中(所谓的匈牙利表示法)是脑损坏的 - 编译器无论如何都知道类型并且可以检查它们,它只会使程序员感到困惑。难怪MicroSoft制作有缺陷的程序。

LOCAL变量名称应该简短,并且要点。如果你有一些随机整数循环计数器,它应该被称为i。如果没有机会被误解,那么调用它loop_counter是非生产性的。类似地,tmp可以是用于保存临时值的任何类型的变量。

如果你害怕混淆你的本地变量名,你还有另一个问题,就是所谓的功能 - 生长 - 激素 - 失衡综合症。见第6章(功能)。


-2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.