美文网首页
一文搞定js作用域 var、const、let区别

一文搞定js作用域 var、const、let区别

作者: 虎牙工务员刘波 | 来源:发表于2021-04-09 18:50 被阅读0次

    前言:首先说下作用域,两种:全局作用域、函数作用域。es6时多了一个作用域:块级作用域。一起来看下吧~

    1、全局作用域:

    var a = 1   //声明一个a
    
    window.a   // 1
    
    function test(){
    console.log(a)
    }
    test()    // 1
    
    console.log(a)  //  1
    

    这就是全局作用域,只要声明了,全局的任何地方都可以拿到,所以就叫全局作用域。

    2、函数作用域

    函数作用域包括:定义在函数内的变量,只作用于函数内部,也就是说别的地方拿不到。(重点,跟闭包有很大关系,先不讲闭包)

    函数作用域:

    function test(){
      var bb =11
    }
    console.log(bb)   //报错  bb is not defined
    

    验证完成,上面函数内用var声明的变量,在函数外面直接拿不到了,说明声明的变量只作用在函数内。

    3、es6的块级作用域{} + let/const:

    我们先看下es6之前:

    if(true){
     var aaa = 123
    }
    console.log(aaa)  // 123
    
    {
     var b = 2
    }
    console.log(b)    //  2
    

    可以看到上面的es6之前通过var声明的变量,有明显的弊端啊!
    举个栗子:我的英文实力水平有限,在许多块级元素声明变量时候可能会导致重复,要知道,var声明的东西可以再次声明的并且改变原本数据类型的,那就会把我原先的变量给覆盖了。
    有因必有果,为了有更好更清晰的定义于是**es6的块级作用域const、let应运而生。

    块级作用域

    很好理解,用{ }包裹的就属于就属于块级作用域,例如if、switch、for语句中,使用const、let声明变量就属于块级作用域

    if(true){
    const  test = 1234
    }
    console.log(test)   // test is not defined
    
    if(true){
    let   test2 = 1234
    }
    console.log(test2)   // test2 is not defined
    

    区别
    const声明的是一个常量
    let声明的是一个变量 (变量就是数据类型可变的)

    let a = 1
    a = {}
    a   // {}
    
    const b = 1
    b = {}     //  报错
    

    以上内容为个人理解,可能不够标准表述,但是方便理解与记忆,错误之处留言指出~~~😊

    温馨提示:看完此文可以和闭包一起食用

    相关文章

      网友评论

          本文标题:一文搞定js作用域 var、const、let区别

          本文链接:https://www.haomeiwen.com/subject/kecvkltx.html