变量、标识符及变量提升
2019-01-19 16:43
851 查看
一、变量的概念
变量就是给“值”起名字,然后引用这个名字,就等同于引用这个值。变量的名字就是变量名;
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后面的代码不进行变量提升;下面的不受影响;
- 变量名重复,不再重新声明,执行后重新定义;
- 匿名函数不需要进行变量提升
相关文章推荐
- 黑马程序员_java语法基础【1】(关键字,标识符,注释,常量与变量,运算符)
- [转]谈谈我遇到的前端的一些神奇面试题--变量提升,函数提升
- 黑马程序员----Java基础(一):关键字、标识符、常量、变量
- 浅谈JS变量提升
- javascript 变量提升,及变量作用域
- 预解析 var 变量提升 函数提升
- JavaScript中变量提升与函数提升经典实例分析
- javascript中的变量提升和函数声明提升
- Java内功提升之标识符
- 2 Java基础语法(关键字,标识符,注释,常量,进制转换,变量,数据类型,数据类型转换)
- js之变量提升
- 黑马程序员——Java基础知识——关键字、标识符、常量、变量、运算符、转义字符
- 深拷贝+作用域+作用域链+变量提升
- JavaScript系列文章:变量提升和函数提升
- 标识符 关键字和变量的命名规则
- JavaScript中变量提升 Hoisting
- 20170214C语言提升08_指针_01变量及指针及数组
- Java基础知识(数据类型、标识符、变量、运算符和流程控制语句)
- Java基础语法(一)—标识符、关键字、常变量、数据类型
- js的变量提升和函数提升