const、let、var的区别
1)、相同点
都能在全局和局部声明,在全局声明的是全局变量,在局部声明的局部变量
全局变量
var a = 1
let b = 2
const c = 3
局部变量
function name(params) {
var a = 1
let b = 2
const c = 3
}
2)、不同点
1、变量申明
var声明变量:
1、var声明变量时可以只声明不赋值(不建议)
2、var声明的变量可以重复,后面的会覆盖前面的
//只声明不赋值
var a
重复声明
var a=10
var a=20
console.log(a)//打印20
let声明变量:
1、let声明变量时可以只声明不赋值(不建议)
2、let声明的变量在同一作用域内不可以重复,会报错;
但是在不同的作用域内不会影响。
const声明变量:
1、const声明变量时必须赋值,不赋值会报错
2、const声明的变量在同一作用域内不可以重复,会报错(同let);
2、变量提升
什么是变量提升:变量提升是变量能在变量声明的前面使用,不会报错
var:var声明的变量是支持变量提升,预解析的结果是undefined
let和const:变量都不支持变量提升,会报错
//var a var声明的变量提升,即预解析
console.log(a);
console.log(b);
console.log(c);
var a = 1
let b = 2
const c = 3
执行结果var变量提升返回undefined,let和const不会进行预解析,程序报错
3、作用域
let和const具有块级作用域,var不存在块级作用域,可以跨块访问, 不能跨函数访问
if(true){
var a = 0
let b = 0
const c = 0
}
console.log(a);//0
console.log(b);//报错
console.log(c);//上面报错,下面不执行
这里只有var声明的变量才能打印出来,因为var声明的是全局变量
//var 声明的变量不能跨作用域使用
function test() {
var message = "zimo"; // 局部变量
}
test();
console.log(message); // 报错
4、暂时性死区
在使用let、const命令声明变量之前,该变量都是不可用的。这在语法上,称为暂时性死区,只能在当前作用域内查找。使用var声明的变量不存在暂时性死区。
// name会被提升
console.log(name); // undefined
var name = 'zimo';
// age不会被提升
console.log(age); // ReferenceError:age没有定义
let age = 18;
// sex不会被提升
console.log(age); // ReferenceError:age没有定义
const sex = "男";
总结
不同点:
const声明的变量必须赋初值
const声明的变量是常量,不能发⽣改变,可以理解为let,const的声明不能重复
cons、let声明的变量不能提升
const、let声明的变量只在当前块作⽤域中有效
const、let声明的变量会产⽣暂时性的死区,只能在当前块作⽤域中查找