在ES6中新增了一些对变量名操作的语法。在以前的版本中,javascript中的变量只能由var去定义,而在ES6又增加了两种新的定义方法,ES6中新增的两个定义变量的方式都是块级作用域,下面我来说一下javascript中三种定义变量的方式
const, var, let的区别?
1.var定义的变量可以修改,如果不初始化会输出undefined,可以多次定义同一变量,不会报错。
<script>
var num = 100;
var num2;
num = 200;
var num = 1000;
alert(num); //1000
</script>
2.
const
是块级作用
域,
定义的变量不可以修改,而且必须初始化。
<script>
//let和const都没有变量提升,只有var有
alert(num); //error
const NUM= 100;
// NUM = 200; //error
// const NUM2; //error
alert(NUM);
//let和const都是块级作用域
const A= 55;
function low(){
const A= 100;
alert(A); //100
}
alert(A); //50
low();
</script>
3.
let
是块级作用域,函数内部使用let定义后,对函数外部无影响,定义的变量可修改。
注:在ES6以前没有块级作用域,所以也就有了JavaScript变量穿透的问题。
<script>
let num = 200;
num = 300;
function number(){
//这个变量和外部变量的作用域不同
let num = 1000;
alert(num); //1000
}
alert(num); //300
//let和const都没有变量提升,只有var有
alert(num2); //error
let num2;
</script>
值的一提的是,在我以前写了一篇文章
浅谈Javascript变量提升当中,我简述了一下用var定义的变量都会把变量提升上面然后赋值undefined,在ES6中新增的const和let都不存在了,这一点要注意一下。
这些就是var,const,let基本的使用,建议在开发中尽量不要使用var用定义变量,因为性能太差了,可以重复声明变量,无法限制修改,没有块级作用域。
而定义变量用let,定义常量使用const,定义常量用大写字母命名,每个单词用下划线分开。因为这两种定义变量的方式都是块级作用域,且不可以二次定义相同的变量名,大大减少了开发中变量冲突的问题。