let var const 三者的区别

我们可以围绕以下问题展开测试

是否存在变量提升

是否存在暂时性死区

是否允许重复声明变量

是否存在块级作用域

是否能修改声明的变量

是否存在变量提升

先说一下什么是变量提升 

变量提升就是在未定义之前可以使用而且不报错  (上代码)

console.log(xfn1)  //undefined
var xfn1 = 111;

console.log(xfn2)  //ReferenceError: g is not defined
let xfn2 = 222;

console.log(xfn3)  //ReferenceError: g is not defined
const xfn3 = 333;

var 有变量提升  他不会报错 而是会返回一个undefined

let const  这两个就没有变量提升会报错 所以他们两个需要先声明在使用

变量提升中还有一个问题 预解释

什么是预解释

当js引擎读到js文档的时候,在js代码执行之前,就先把所有带var和function的进行提前定义(变量提升的原因。)

是否存在暂时性死区

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

let const  都存在暂时性死区    var 不会存在暂时性死区

是否允许重复声明变量

var a = 10
var a = 11
//控制台无异常

let b = 11
let b = 22
//控制台报错 Uncaught SyntaxError: Identifier 'b' has already been declared

const c = 11
const c = 22
//控制台报错 Uncaught SyntaxError: Identifier 'c' has already been declared

var 可以重复声明  

let  const  不可以重复声明  会报错显示标识符以声明

是否存在块级作用域

作用域 分为 全局作用域 函数作用域  ES6 新增块级作用域 (例 {}大括号 if语句  for循环语句 )

//1,解决内层变量可能覆盖外层变量的问题
var b = 2;
function fun1(){
    console.log(b) //2 访问的外层变量
    if(false){
        let b = 3;//不存在变量提升,变量存在于块级作用域之中。
    }
}
fun1()
//2,解决用来计数的循环变量泄露为全局变量。
var a1 = 'hello';
for (let a = 0; a < a1.length; a++) {
  console.log(a1[a]); //a存在于块级作用域之中,和其绑定
}
console.log(a); // 报错 

var 不存在块级作用域

let  const  存在块级作用域

是否能修改声明的变量

        var aa = 11
        aa = 22
        console.log(aa);  //22

        let cc = 22
        cc = 12
        console.log(cc);  //12

        const bb = 21
        bb = 11   //直接报错

var let 声明的是变量可以直接修改

const 声明的是常量 会直接报错

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值