常量和变量

每一种计算机语言都有自己的数据结构,JavaScript 脚本语言的数据结构包括常量和变量等。

常量

当程序运行时,值不能改变的量为常量(constant)。

常量主要用于为程序提供固定和精确的值(包括数值和字符串),例如,数字、逻辑值(true、false)等都是常量。

通常使用 const 来声明常量。

						
const 常量名:数据类型 = 值;
						
					

说明:

  • 常量在程序中定义后便会在计算机中一定的位置存储下来,在该程序没有结束之前,它是不发生变化的。
  • 如果在程序中过多地使用常量,会降低程序的可读性和可维护性。
  • 当一个常量在程序内被多次引用,可以考虑在程序开始处将其设置为变量,然后引用。

变量

变量是指程序中一个被命名的存储单元,其主要作用是为数据操作提供存放的容器。

对于变量的使用要明确:变量的命名规则、变量的声明方法、变量的作用域。

变量的命名规则

JavaScript 中变量的命名规则如下:

  • 必须以字母或下划线开头,后面可以是数字、字母或下划线。
  • 变量名不能包含空格、加号、减号等符号。
  • 不能使用 JavaScript 中的关键字。
  • JavaScript 是严格区分大小写的语言。例如,username 和 userName 是两个不同的变量。
  • 虽然变量可以任意命名,但在编程时尽量使用便于记忆且有意义的变量名,以增强程序的可读性。
JavaScript 关键字
abstractcontinuefinallyinstanceofprivatethis
booleandefaultfloatintpublicthrow
breakdoforinterfacereturntypeof
bytedoublefunctionlongshorttrue
caseelsegotonativestaticvar
catchextendsimplementsnewsupervoid
charfalseimportnullswitchwhile
classfinalinpackagesynchronizedwith

变量的声明

在 JavaScript 中,使用变量前需要先对其进行声明,所有的 JavaScript 变量都由关键字 var 声明(declare)。

						
var variable;
						
					

在声明变量的同时也可以对变量进行赋值。

						
var variable = 1;
						
					

变量声明需要遵循的规则为:

  • 使用关键字 var 可以同时声明多个变量。
  • 可以在声明变量的同时对其赋值,即初始化。
  • 如果只是声明了变量,并未对其赋值,则其值默认为 undefined。
  • var 语句可以用作 for 循环和 for(in) 循环的一部分,这样就使循环变量的声明成为循环语法自身的一部分,使用起来比较方便。
  • 也可以使用 var 语句多次声明同一个变量,如果重复声明的变量已经有一个初始值,那么此时的声明就相当于对变量的重新赋值。
  • 当给一个尚未声明的变量赋值时,JavaScript 会自动用该变量名创建一个全局变量。
  • 在一个函数内部,通常创建的只是一个仅在函数内部起作用的局部变量,而不是一个全局变量。要创建一个局部变量,不是赋值给一个已经存在的局部变量,而是必须使用 var 语句进行变量声明。
  • 由于 JavaScript 采用 弱类型 的形式,因此可以不必理会变量的数据类型,即可把任意类型的数据赋值给变量。
  • 在 JavaScript 中,变量可以先不声明,而是在使用时,根据变量的实际作用来确定其所属的数据类型。但是建议在使用变量前就对其声明,因为声明变量的最大好处就是能及时人工发现代码中的错误。因为 JavaScript 是采用动态编译的,而动态编译是不易于发现代码中的错误的,特别是变量命名方面的错误。
						
var a,b,c;
var i=1,j=2,k=3;

var name;                //=> name is undefined

for(var i = 1; i < 10; i++) {
	
}

g_name = 'wanghao';      //全局变量 g_name
						
					

无类型变量

JavaScript 变量是无类型的(untyped),变量可以被赋予任何类型的值,同样一个变量也可以重新赋予不同类型的值。

变量的作用域

变量的作用域(Scope)是指某变量在程序中的有效范围,也就是程序中定义该变量的区域。

JavaScript 采用词法作用域(lexical scoping)。

  • 全局变量(global variable):

    不在任何函数内声明的变量。全局变量在 JavaScript 程序中的任何地方都是可见的。

  • 局部变量:

    在函数内声明的变量具有函数作用域(function scope),并且只在函数内可见。

    函数的参数也是局部性的,只在函数内部起作用。

    函数及其内部的东西可以当作一个特殊对象对待。

						
<script type="text/javascript">
  var a;                 //全局变量,作用域是整个脚本代码
  function myFunc() {
    a = "hello world!";   
    var b = "hi!";
    alert(a + b);       
  }
</script>
						
					

变量的生存期

变量的生存期是指变量在计算机中存在的有效时间。从编程的角度来说,可以简单地理解为该变量所赋的值在程序中的有效范围。

JavaScript 中变量的生存期有两种:全局变量和局部变量。

  • 全局变量在主程序中定义,其有效范围从其定义处开始,一直到本程序结束为止。
  • 局部变量在程序的函数中定义,其有效范围只有在该函数之内,当函数结束后,局部变量的生存期也就结束了。