前言
了解const,let和var之前,我们需要知道
什么是块?
在javascript中,{}两个括号就是一个块
//这是一个块
{
console.log('块内代码');
}
console.log('块外代码');
什么是变量提升?
//例一
//这里先输出
console.log(buibuibui); //会输出undefined
//上面输出完了。再执行
var buibuibui = 10;
咋javascript中,所有使用var声明的变量都会默认被提升到代码的最顶部。 所以例一的代码等同于例二的代码
//例二
var buibuibui;
console.log(buibuibui);
buibuibui = 10;
正文 var,let,const的区别和作用
判断变量提升 案例 👇
console.log(varParams); //输出undefined --因为 var 有变量提升
console.log(letParams); //直接报错,变量未声明 --因为 有变量提升
console.log(constParams); //直接报错,变量未声明 --因为 var 有变量提升
var varParams = 10;
let letParams = 20;
const constParams = 30;
得出结论:var具备变量提升,但是 let和const并不具备
判断块级作用域 案例👇
{
var buibuibui = "buibuibui"; //没有块的概念,再在块外面也可以访问
let tututu = "tututu"; //有块的概念,在块外无法访问
const boomboom = "boomboom" //有块的概念。在块外无法访问
}
console.log(buibuibui); //输出 buibuibui
console.log(tututu); //报错给你看 tututu is not defined
console.log(boombomm); //报错给你看 boomboom is not defined
const声明的值无法二次修改和必须进行初始化赋值
//const声明的变量必须进行初始化赋值 比如
const buibuibui // × 会直接报错 ---报错信息:'const' declarations must be initialized
const buibuibui = 10; // √ 正常运行 ---啥事都不会有
//使用const声明的变量无法改变
const tututu = 100; //赋值
//const声明的变量无法更改值
tututu = 99; //报错 error:Assignment to constant variable
总结
var
- 有变量提升
- 没有块级作用域或者是var根本没有块的概念,可以在块外访问
- 可以修改值
let
- 没有变量提升
- 有块级作用域的概念,无法在块外访问
- 可以修改值
const
- 没有变量提升
- 有块级作用域概念,无法在块外访问
- 不能修改值
- 声明时候必须进行初始化赋值
课外
const arr =[]; //使用const声明数组
arr.push(1); //往数组内添加内容,不报错!!
//但是
arr = [1]; //这个会报错
理论上来说,使用const声明的变量是不允许改变的,为什么数组使用push()不会报错?
这是关于const的检测原理,不在本片文章的讲解范围内。涉及引用类型和值类型,栈内存的堆内存的知识点,详细请查看我的另一篇文章<<const的数组和对象为什么可以改变>>