let var const区别

本文详细介绍了JavaScript中的var、let和const三种变量声明方式的差异,包括作用域、变量提升、暂时性死区和预解析的概念。var没有块级作用域,允许重复声明,而let和const具有块级作用域,let不允许重复声明,const则用于声明不可修改的常量。预解析阶段,var声明会被提升,而let和const不会。文章通过实例展示了这些概念的应用。
摘要由CSDN通过智能技术生成

var

var声明全局变量,不具有块级作用域,切可以重复声明,没有暂时性死区


    var a = 1
    console.log(a); //打印结果1

    var c = 2
    function b() {
        var a = 1
        console.log(c); //打印结果2,在外部声明变量,函数内部可以获取到数据
        console.log(a); //打印结果1,在内部声明变量,函数内部依旧可以获取到数据
    }
    b()

换句话来说,不管var声明的变量在哪,即使在for循环之外依旧可以使用

let

let具有块级作用域,切不可以重复声明变量,拥有暂时性死区(所谓暂时性死区,如果在一个封闭的块级变量里声明了let和const,从一开始就形成了一个封闭的作用域,只要是在声明之前使用这些变量,就会形成暂时性死区)

暂时性死区的场景

暂时性死区的场景

    var a=a; //不报错 因为var可以变量提升 ,在等号赋值的时候是从右往左//使用变量a,此时a是undefined,赋值的是undefined

   let a=a;//报错 赋值运算是从右往左,右边使用变量a结果发现a没有声明 ,而let语法规定不能再没定义之前使用变量,所以报错
 let a = 3;
    console.log(a);//在函数外部定义let输出a=3
    function bbb() {
        let c = 6;
        console.log(a);//在函数内部定义输出a=6
    }
    bbb();
    console.log(a);//调用let输出a=3

const

const用于声明常量,具有块级作用域,也可以声明块级,切const声明的变量不可以修改,必须初始化

  const b = 2;
    console.log(b);
    b = 5;
    console.log(b);//在函数外部修改变量无法输出

预解释

预解释又称变量提前声明,js代码执行之前,浏览器会把默认带过来的var和function先进性声明和定义

1.声明和定义

var a = 10

先是var声明 num

告诉浏览器全局变量中有一个num的变量,如果只是声明没有赋值,控制台打印underfind

定义了 num= 10

给变量进行了赋值

2.有var和function关键字的在预解释的时候操作是不同的

var在预解释的时候只是提前声明了一下

function在预解释的时候声明和定义都同步完成

3.预解释只发生在当前作用域下

如果没有定义作用域,会在window下进行预解释,如果有函数作用域的情况下,会在当前函数的作用域中进行预解释

变量提升

JavaScript 仅提升声明,而不提升初始化。如果你先使用的变量,再声明并初始化它,变量的值将是 undefined。

1:所有的声明都会提升到作用域的最顶上去。

2:同一个变量只会声明一次,其他的会被忽略掉。

3:函数声明的优先级高于变量申明的优先级,并且函数声明和函数定义的部分一起被提升。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值