现代JavaScript编程:经典范例与实践技巧
上QQ阅读APP看书,第一时间看更新

2-2 变量的命名

在对变量进行命名时,需牢记下面两条规则:

(1)变量名的第1个字符必须是字母、下画线或者美元符号。

(2)除了第1个字符之外,其余字符可以是下画线、美元符号或者任意数字与字母。

下面这些变量名都是合法的:

var_myName_,MyName,$name,_3name,n3;

下面这些变量名都是非法的:

虽然JavaScript对变量的命名比较自由,但并不意味着开发者在命名变量时可以随心所欲。正确地对变量命名应该能够做到见形知意,并且从外观上看起来不突兀,很自然。比较著名的变量命名方法有如下几种:

1.Camel(驼峰)命名法

Camel命名法是指变量的首字母小写,接下来的每个单词的首字母大写,示例如下:

//驼峰命名法
var myName;

2.Pascal命名法

Pascal命名法是指变量的首字母进行大写,其后每个单词的首字母也进行大写,Pascal命名法有时也被称为大驼峰命名法,示例如下:

//Pascal命名法
var MyName;

3.匈牙利类型命名法

Camel与Pascal命名法只针对变量的意义进行解释,匈牙利类型命名法中还加入了变量的类型,其规则是在Pascal命名法的基础上,在变量名的最前面加上变量类型的标识。例如数字型变量添加i标识、字符串变量添加s标识,示例如下:

//匈牙利类型命名法
var iAge = 25;
var sName = 'jaki';

表2-1列出了常用类型对应的标识。

表2-1 常用类型对应的标识

另外,对于一些大小写不敏感的编程语言,也常常采用下画线命名法。

4.下画线命名法

单词与单词之间使用下画线进行分割,示例如下:

//下画线命名法
var my_name;

作用域与作用域链

作用域对于一门编程语言至关重要,在许多编程语言中,都以大括号进行作用域的划分。例如,C语言中的for循环体、while循环体、if分支块等构成一个作用域,在其中定义的变量只在作用域内有效,出了作用域则不能被访问到。在ECMAScript中,除了块级作用域外(与let相关),作用域是以函数来进行区分的,初学者往往会在这里产生迷惑。

作用域控制着变量的可见性与生命周期。在进行软件设计时,开发者应该遵循最小暴露原则,将一些不必要的变量和函数隐藏起来。ECMAScript中的作用域可以笼统地划分为两类:全局作用域与局部作用域。全局作用域中的变量和函数在代码中的任何地方都可以访问到(最外层函数和定义的变量),例如:

上面代码中的函数globalFunc、变量name和age都在全局作用域内。

上面代码中的subBlock函数创建了一个局部作用域,其中的变量subject和函数show都只能在其作用域内进行访问。

另外,在进行变量访问时,ECMAScript会遵循作用域链的方式从内到外逐层访问,如果在内层作用域中可以访问到变量,就会停止寻找,示例如下:

由此可知,在ECMAScript中,如果你频繁访问一个全局作用域中的变量,将是十分影响性能的。