zoukankan      html  css  js  c++  java
  • ES6新特性1:let和const

    本文摘自ECMAScript6入门,转载请注明出处。

    一、let

      1. ES6增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。

    {
        let a = 10;
        var b = 1;
    }
    
    a // ReferenceError: a is not defined.
    b // 1

      

      2. let不像var那样会发生“变量提升”现象。所以,变量一定要在声明后使用,否则报错。

    console.log(foo); // 输出undefined
    console.log(bar); // 报错ReferenceError
    
    var foo = 2;
    let bar = 2;

      3. 暂时性死区:只要块级作用域内存在存在letconst命令,它所声明的变量就“绑定”在这个区域,形成封闭作用域,不再受外部的影响。凡是在声明之前就使用这些变量,就会报错。

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

      4. let不允许在相同作用域内,重复声明同一个变量。因此,也不能在函数内部重新声明参数。

    //用let声明以后,再用var或let声明都报错
    function () {
        let a = 10;
        var a = 1;   //报错
        let a = 1;    //报错
    }
    
    //函数内部重新声明参数
    function func(arg) {
        let arg; // 报错
    }
    function func(arg) {
        {
            let arg; // 不报错
        }
    }

    二、const

      1. const声明一个只读的常量。一旦声明,就必须立即初始化,并且常量的值就不能改变。其他性质跟let一样。

    const PI = 3.1415;
    PI // 3.1415
    
    PI = 3;   // 报错
    
    const foo;    //报错

    三、顶层对象

      1. 顶层对象,在浏览器环境指的是window对象,在Node指的是global对象。ES5之中,顶层对象的属性与全局变量是等价的。

    window.a = 1;
    a // 1
    
    a = 2;
    window.a // 2

      2. ES6为了改变这一点,一方面规定,为了保持兼容性,var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。

    var a = 1;
    // 如果在Node的REPL环境,可以写成global.a // 或者采用通用方法,写成this.a window.a // 1 let b = 1; window.b // undefined
  • 相关阅读:
    vue的选项
    css(3)基础知识查漏补缺
    总结获取网页相关的一些宽高
    vue的全局api(二)
    vue的全局api
    vue的内部指令
    Java File
    Java File IO学习笔记
    systemctl介绍
    java学习笔记一(20180319)
  • 原文地址:https://www.cnblogs.com/lishuxue/p/6046689.html
Copyright © 2011-2022 走看看