var let const

作者: lltree | 来源:发表于2019-07-05 10:59 被阅读0次

    ES2015 引入了两个重要的 JavaScript 新关键词:letconst
    这两个关键字在 JavaScript 中提供了块作用域(Block Scope)变量和常量
    在 ES2015 之前,JavaScript 只有两种类型的作用域:全局作用域和函数作用域。ES6增加块作用域

    全局作用域

    全局(在函数之外)声明的变量拥有全局作用域。
    全局变量可以在 JavaScript 程序中的任何位置访问。
    实例

    var carName = "porsche";
    
    // 此处的代码可以使用 carName
    
    function myFunction() {
      // 此处的代码也可以使用 carName
    }
    

    总结:

    不管let 还是 var 放到外边则是全局作用域

    函数作用域(也叫局部作用域)

    局部(函数内)声明的变量拥有函数作用域。
    局部变量只能在它们被声明的函数内访问。

    
    function myFunction() {
      var carName = "porsche";
      // code here CAN use carName
    }
    
    // 此处的代码不可以使用 carName
    

    块作用域

    通过 var 关键词声明的变量没有块作用域。
    在块 {} 内声明的变量可以从块之外进行访问。

    { 
      var x = 10; 
    }
    // 此处可以使用 x
    

    在 ES2015 之前,JavaScript 是没有块作用域的。
    可以使用 let 关键词声明拥有块作用域的变量。
    在块 {} 内声明的变量无法从块外访问:
    实例

    { 
      let x = 10;
    }
    // 此处不可以使用 x
    

    如果在块外声明声明,那么 var 和 let 也很相似。
    它们都拥有全局作用域:

    var x = 10;       // 全局作用域
    let y = 6;       // 全局作用域
    

    重新声明变量

    允许在程序的任何位置使用 var 重新声明 JavaScript 变量
    使用 var 关键字重新声明变量会带来问题。
    在块中重新声明变量也将重新声明块外的变量:
    实例

    // 此处 x 为 10
    { 
    `允许在程序的任何位置使用 var 重新声明 JavaScript 变量`
      var x = 6;
      // 此处 x 为 6
    }
    // 此处 x 为 6
    

    使用 let 关键字重新声明变量可以解决这个问题。
    在块中重新声明变量不会重新声明块外的变量:
    实例

    // 此处 x 为 10
    { 
      let x = 6;
      // 此处 x 为 6
    }
    // 此处 x 为 10
    

    在相同的作用域,或在相同的块中,通过 let 重新声明一个 let 变量是不允许的:

    let x = 10;       // 允许
    let x = 6;       `// 作用域相同不允许`
    
    {
      let x = 10;   // 允许
      let x = 6;   `// 作用域相同不允许`
    }
    

    总结:

    var 不管作用域相同不,都可以重新声名变量
    let 作用域相同不允许重新声名变量,作用域不同则可以

    const 与let作用域用法完全相同,但是不能重新赋值

    在声明时赋值

    const 变量必须在声明时赋值

    `不正确`
    const PI;
    PI = 3.14159265359;
    `正确`
    const PI = 3.14159265359;
    

    不可更改常量原始值但可更改常量对象的属性

    如果我们将一个原始值赋给常量,我们就不能改变原始值:

    const PI = 3.141592653589793;
    PI = 3.14;      // 会出错
    PI = PI + 10;   // 也会出错
    

    常量对象可以更改

    //您可以创建 const 对象
    const car = {type:"porsche", model:"911", color:"Black"};
    
    `// 您可以更改属性:`
    car.color = "White";
    
    `// 您可以添加属性:`
    car.owner = "Bill";
    

    常量数组可以更改

    / 您可以创建常量数组:
    const cars = ["Audi", "BMW", "porsche"];
    
    // 您可以更改元素:
    cars[0] = "Honda";
    
    // 您可以添加元素:
    cars.push("Volvo");
    

    但是您无法重新为常量数组赋值:

    const cars = ["Audi", "BMW", "porsche"];
    cars = ["Honda", "Toyota", "Volvo"];    // ERROR
    

    相关文章

      网友评论

        本文标题:var let const

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