let var const区别

 首先我们要知道在 javaScrip中的var ,let (es6新增),const(es6新增) 都是声明变量的方式。

let const 语法和 var一样都是用来声明变量的

1.var 声明的变量是存在变量提升的,let ,const声明的变量不存在变量提升。

变量提升:

变量提升是指代码在未定义之前可以使用且不会报错

console.log(a); //undefined 在没有定义之前使用a代码不报错 值为undefined
var a = 100;  //使用var声明的变量存在变量提升
function fn(){

}


let a = 100;  //Cannot access 'a' before initialization  不能在a未定义之前使用
let b
console.log(b);//undefined*/

预解析:

JS代码在运行之前,先解析当前作用域中的所有代码,获取所有被声明的变量进行预处理。

2.在同一作用域下var可以重复声明,let,const不可以重复声明。

var a = 10;
var a = 12; //不会报错后声明的变量会覆盖前面的变量

let a = 10;
let a = 12; //Identifier 'a' has already been declared ==> a这个变量已经被创建(定义过了)

const a = 10
const a = 15  //Identifier 'a' has already been declared  ==>标识符“a”已经声明

3.var声明的变量不存在块级作用域 let,const声明的变量存在块级作用域。

js中的作用域 全局作用域  函数作用域  块级作用域(ES6新增)

作用域链:

      在局部作用域(函数作用域/块级作用域)中访问一个变量,如果这个作用域不存在这个变量,那么根据作用域链查找的原则,会一层层向上查找,知道找到最顶层作用域(全局作用于)为止,如果还找不到 就会报错 xxx is not defined

//块级作用域  ES6新增作用域 块级作用域 一个{ }表示一个块级作用域
var a = 2;
for (var a = 0;a<10;a++){

}
console.log(a); //10

var a = 2;
for (let a = 0;a<10;a++){

}
console.log(a); //2

4.var和let可以重新赋值 const声明的是一个常量,const声明的变量必须要进行初始化 不能够重新赋值 。

var a = 1;
a=2;     //不会报错

let b = 1;
b = 100; //不会报错

const c = 1;
c =100; //Assignment to constant variable. ==>const声明的是一个常量 不能够重新赋值*/

5.var声明的变量不存在暂时性死区,let,const声明的变量存在暂时性死区。

暂时性死区:

在变量声明之前,任何的地方都不能去提前使用,一旦使用就会报错,那么这之前的这些代码,对于这个变量来说就是暂时性死区         

const i = 1
    {
      //死区开始
      
      console.log(i) //死区里边拿不到外边的i,也拿不到本代码块内的i
      
	  //死区结束
      const i = 2 
      console.log(i) //直到这里才能正常使用 i 
    }

总结:

1.var 声明的变量是存在变量提升的,let ,const声明的变量不存在变量提升。

2.在同一作用域下var可以重复声明,let,const不可以重复声明。

3.var声明的变量不存在块级作用域 let,const声明的变量存在块级作用域。

4.var和let可以重新赋值 const声明的是一个常量,const声明的变量必须要进行初始化 不能够重新赋值 。

5.var声明的变量不存在暂时性死区,let,const声明的变量存在暂时性死区。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值