ES6-为什么要用let和const,而不用var
目录
前言
在IDEA中编写js代码时,总会遇到下面这样的提示:
意思是让用let或const代替var,但为什么要这么做呢?var和let的区别又在哪呢?
重复定义
先来下面的代码:
var a = 1
var a = '555'
console.log(a)
很明显,a变量重复定义了,但运行起来,我们发现却没有报错,而且控制台输出的是555
但当我们把代码换成下面这样时:
let a = 1
let a = '555'
console.log(a)
运行起来会报错:SyntaxError: Identifier 'a' has already been declared
也就是说,var运行重复定义,let不允许重复定义。
先使用,后定义
console.log(a)
var a = '555'
控制台输出:undefined
也就是说先使用,后定义是被允许的。
console.log(a)
let a = '555'
控制台:Cannot access 'a' before initialization
var允许先使用后定义,而let不允许
变量作用域
function fun(){
for(var i = 0; i < 10; i++){
console.log(i)
}
console.log(i)
}
fun()
按道理说,for循环中的变量和循环外不是一个作用域,但这里却可以在循环外调用。
function fun(){
for(let i = 0; i < 10; i++){
console.log(i)
}
console.log(i)
}
fun()
当我们改成let后,控制台立刻就报错了:i is not defined
var允许在作用域外调用,而let不允许
关于const
const和其他语言类似,是用来定义常量的关键字,一旦定义,值不可改变。
为什么提倡使用let和const
可以避免变量被覆盖,变量被污染等问题的出现。