一、变量的概念
变量就是给“值”起名字,然后引用这个名字,就等同于引用这个值。变量的名字就是变量名;
1、注意事项:
(1)、如果只是声明变量而没有赋值,则该变量的值是undefined。
undefined是一个特殊的值,表示“无定义”
var a; a // undefined
(2)、进行变量赋值的时候,没有写var命令,这条语句也是有效的。
var a = 1; // 基本等同 a = 1;
但是,不写var
的做法,不利于表达意图,而且容易不知不觉地创建全局变量,所以建议总是使用var
命令声明变量。
(3)、可以在同一条var
命令中声明多个变量。
var a, b,c;
var a=b=c=21; //a=undefined; //b=undefined; //c=21
(4)、
JavaScript 是一种动态类型语言,也就是说,变量的类型没有限制,变量可以随时更改类型。
var a = 1; a = 'hello';
上面代码中,变量a
起先被赋值为一个数值,后来又被重新赋值为一个字符串。第二次赋值的时候,因为变量a
已经存在,所以不需要使用var
命令。
(5)、
使用var
重新声明一个已经存在的变量,是无效的;
var a=1; var a;//此操作毫无意义
但是,如果第二次声明的时候还进行了赋值,则会覆盖掉前面的值。
var a = 2; var a = 4; //代码执行到此行时,a=4;
上述代码等同于下面这段代码
var a = 2; var a; a = 4
二、标识符:
标识符(identifier)指的是用来识别各种值的合法名称。最常见的标识符就是变量名,以及后面要提到的函数名。JavaScript 语言的标识符对大小写敏感,所以a
和A
是两个不同的标识符。
标识符有一套命名规则,不符合规则的就是非法标识符。JavaScript 引擎遇到非法标识符,就会报错。
简单说,标识符命名规则如下。
1、第一个字符,可以是任意 Unicode 字母(包括英文字母和其他语言的字母),以及美元符号($
)和下划线(_
)。
2、第二个字符及后面的字符,除了 Unicode 字母、美元符号和下划线,还可以用数字0-9
。
下面这些都是合法标识符。
arg0
_tmp
$elem
π
下面这些则是不合法的标识符。
1a // 第一个字符不能是数字 23 // 同上 *** // 标识符不能包含星号 a+b // 标识符不能包含加号 -d // 标识符不能包含减号或连词线
三、变量提升
JavaScript 引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行。这造成的结果,就是所有的变量的声明语句,都会被提升到代码的头部,这就叫做变量提升(hoisting)。
console.log(a); var a = 1;
上面代码首先使用console.log
方法,在控制台(console)显示变量a
的值。这时变量a
还没有声明和赋值,所以这是一种错误的做法,但是实际上不会报错。因为存在变量提升,真正运行的是下面的代码。
var a; console.log(a); a = 1;
最后的结果是显示undefined
,表示变量a
已声明,但还未赋值。
变量提升的五种情况:
- 不管判断条件是否成立变量都进行提升
- 变量提升只发生在等号左边
- return后面的代码不进行变量提升;下面的不受影响;
- 变量名重复,不再重新声明,执行后重新定义;
- 匿名函数不需要进行变量提升