美文网首页
js中的let和var

js中的let和var

作者: 番茄炒西红柿啊 | 来源:发表于2021-08-16 16:33 被阅读0次

    [toc]

    js中let和var区别

    1. 作用域不同

    • let定义的变量作用域仅限于定义该变量的代码块中。比如:if ... else,for...in...,switch...case...等等
    • var定义的变量作用域为定义该变量的函数范围中(当在函数中定义时),或者为全局的范围(当定义为全局变量时)。

    比如以下面一段if条件判断代码为例:

    (function(){
      if (true) {
        var a = 13
      }
      console.log(a) //控制台输出:13
    })()
    

    在if代码块内使用var定义的变量a,在代码块外仍然可以访问,控制台打印出了a的值。

    (function(){
      if (true) {
        let a = 13
      }
      console.log(a) //控制台输出:ReferenceError: a is not defined
    })()
    

    当我们将var替换成let时,在if代码块外访问时,会直接报错。


    2. 访问顺序的要求不同

    • var定义变量,可以在未定义前访问。
    • let定义变量,必须先定义,后访问。
    (function(){
        console.log(a)
        console.log(b)
        var a = 10
        let b = 11
    })()
    

    控制台输出:

    undefined
    ReferenceError: Cannot access 'b' before initialization
    

    a可以在var未定义前访问,值为undefinedblet未定义前访问直接报错。


    3. 是否可被重复定义

    • let:同一代码块中,同名变量不可被重复定义。
    • var:同一作用域下,同名变量可以被重复定义。

    还是以if条件语句为例:

    let:

    (function(){
        if (true) {
            let a = 11
            let a = 12
            console.log(a) // 控制台:SyntaxError: Identifier 'a' has already been declared
        }
    })()
    

    var:

    (function(){
        if (true) {
            var a = 11
            var a = 12
            console.log(a) // 控制台:12
        }
    })()
    

    结语

    笔者的入行语言是Objective-Cswift,所以认为js中的let相比var更严谨,也更符合我们的编程思维和习惯。个人更偏向使用let而不是var

    相关文章

      网友评论

          本文标题:js中的let和var

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