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中,如果你频繁访问一个全局作用域中的变量,将是十分影响性能的。