一、变量的概念

变量就是给“值”起名字,然后引用这个名字,就等同于引用这个值。变量的名字就是变量名;

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 语言的标识符对大小写敏感,所以aA是两个不同的标识符。

标识符有一套命名规则,不符合规则的就是非法标识符。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已声明,但还未赋值。

变量提升的五种情况:

  1. 不管判断条件是否成立变量都进行提升
  2. 变量提升只发生在等号左边
  3. return后面的代码不进行变量提升;下面的不受影响;
  4. 变量名重复,不再重新声明,执行后重新定义;
  5. 匿名函数不需要进行变量提升
01-19 20:43