zoukankan      html  css  js  c++  java
  • JavaScript学习笔记 -- ES6学习(二) let 和const

    ES6 中新增了两个命令: let 和const.

    let命令:

    let 用于声明变量,和var 类似,但是所声明的变量只在代码块中有效,不存在变量提升,有暂时性死区。

    1.只在代码块中有效

    和var 命令不同的是,let 声明的变量只在代码块中有效,例如

    {
      let a = 1;
    var b = 2; }
    console.log(b); // print 2; console.log(a); // this will cause error.

    2. 不存在变量提升

    所谓变量提升,就是在同一作用域下,在声明变量之前调用它。

    function test() {
    temp = "test" console.log(temp);
    // will pint test. var temp; }

    然而使用let声明的变量是不存在变量提升的,也就是说,一定要在声明变量之后使用:

    function test() {
      temp = "test"
      console.log(temp);  // reference error.
    
      let temp;
    }

    3. 暂时性死区

    所谓暂时性死区指的是声明的变量不收外部同名变量的影响。例如:

    var tmp = 123;
    
    if (true) {
      tmp = 'abc'; // ReferenceError
      let tmp;
    }

    暂时性死区的存在,使得typeof不再是一个安全的操作了(因为有可能一个变量因为不能提升而导致引用错误)

    4. 另外,let 不允许在同一作用域重复声明

    在同一个块级作用域下,var 声明同一个变量是可以的,但是let是不允许的。

    5.想要得到块级作用域的变量,可以用do命令:

    let x = do {
      let t = f();
      t * t + 1;
    };

    const 命令

    const 命令用于声明只读常量,和let一样,作用域也是块级作用域,不存在变量提升,也有暂时性死区。

    const命令声明常量时,只保证变量名指向的地址不变,也就是说,如果使用const声明的常量指向一个对象,不能够保证对象中的属性值 不被改变。若要想保证对象属性值不变,使用Object.freeze() 来冻结对象。

  • 相关阅读:
    VMware Tools的安装
    XmlSerializer
    string[][]和string[,] 以及 int[][]和int[,]
    Get Length 使用dynamic关键字
    Cocos2d-x 3.0final 终结者系列教程01-无论是从cocos2d-x2.x升级到版本cocos2d-x3.x
    Hosting WCF Service
    A*算法进入
    OpenCV面、人眼检测
    JAVA学习篇--JAVA两种编程模式控制
    采用Java语言如何实现高速文件复制?
  • 原文地址:https://www.cnblogs.com/JacobQiao/p/6209359.html
Copyright © 2011-2022 走看看