前言
了解var let const 的区别
一、var、let、const的区别?
介绍:var关键字在使用的过程中具有声明提升,那什么是声明提升呢?
二、var
1.声明提升
代码如下:
console.log(age)
var age = 16
// 输出结果为undefined
我们可以看到在age定义之前,对age进行访问并没有报错。为了解决这一问题ES6提出了let关键字
三、let
1.解决声明提升
代码如下:
console.log(age)
let age = 16
// 输出结果为Uncaught ReferenceError: Cannot access 'age' before initialization
在这里我们可以看到输出结果为,请不要在初始化之前访问age,这样就很好的解决了var的声明提升问题。
2.解决变量重名问题
代码如下:
let age = 16
let age = 18
console.log(age)
//输出结果 Uncaught SyntaxError: Identifier 'age' has already been declared
我们知道在es5中,对一个变量重复定义,后面声明的变量会把前面的覆盖,然而,在es6中用let进行变量重复定义会抛出该变量已经被定义的错误。
3.块级作用域
块作用域由 { } 包括
代码如下:
if(true){
var a = 1;
console.log(a);
}
console.log(a);
//输出结果 1 1
if(true){
let a = 1;
console.log(a);
}
console.log(a);
//输出结果为 1 Uncaught ReferenceError: a is not defined
var定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问。let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。
三、const
1.常量
代码如下:
const age = 16
age = 17
console.log(age)
// 输出结果为Uncaught TypeError: Assignment to constant variable
常量是不能够被重新赋值的。
总结
- var 声明的变量属于函数作用域,let 和 const 声明的变量属于块级作用域。
- var 存在变量提升现象,而 let 和 const 没有此类现象。
- var 变量可以重复声明,而在同一个块级作用域,let 变量不能重新声明。
- const 变量不能修改。