ES6-为什么要用let和const,而不用var

913

目录

前言

在IDEA中编写js代码时,总会遇到下面这样的提示:

image.png

意思是让用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

可以避免变量被覆盖,变量被污染等问题的出现。