最近在学习VUE时,视频的项目在创建一个变量时经常用Const来创建,再此之前我一直使用var来创建一个变量,通过查阅资料得到以下解释:
一,var声明变量存在变量提升,let和const不存在变量提升
先看这段代码
console.log(a); // undefined ===> a已声明还没赋值,默认得到undefined值var a = 100;console.log(b); // 报错:b is not defined ===> 找不到b这个变量let b = 10;console.log(c); // 报错:c is not defined ===> 找不到c这个变量const c = 10;
再来看这段代码
function fn() { //var a if (true) { console.log(a + ' now') } else { var a = 1 console.log(2) }}fn() // a -> undefined
我们发现不执行的代码也会影响会执行的代码,因为var a会提升到if语句的前面,也就是在if之前就创建了a变量;
undefined可以翻译为不明确,not defined可以翻译为未定义
二,let、const都是块级局部变量
顾名思义,就是只在当前代码块起作用
{ let a = 1}console.log(a) // undefined
const 的特性和 let 完全一样,不同的只是:
声明时候必须赋值
const a
编译器则会报错
控制台报错
SyntaxError: Missing initializer in const declaration
const 只能进行一次赋值,即声明后不能再修改
const a=1a=2
编译器报错
控制台报错
TypeError: Assignment to constant variable.
同一作用域下let和const不能声明同名变量,而var可以
const a =2const a=1
报错
SyntaxError: Identifier 'b' has already been declared