zoukankan      html  css  js  c++  java
  • es6语法

    一、 let

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

    <script>
        {
            var a = 10;
            var a = 20;
        }
        console.log(a);   // 20
    
        {
            let b = 10;
            console.log(b)   // 10
        }
        console.log(b)   // Uncaught ReferenceError: b is not defined
    </script>

    上面代码在代码块之中,分别用letvar声明了两个变量。然后在代码块之外调用这两个变量,结果let声明的变量报错,var声明的变量返回了正确的值。这表明,let声明的变量只在它所在的代码块有效

    var a = [];
    for(var i = 0; i < 10; i++){
        a[i] = function () {
             console.log(i);
        };
    }
    a[5]()    // 10

    // ******************************
    var b = []; for(let i = 0; i < 10; i++){ b[i] = function () { console.log(i); }; } b[5]() // 5

    2、不允许重复声明

    let不允许在相同作用域内,重复声明同一个变量。

    function func() {
         let a = 10;
         var a = 1;
         return a;
    }
    console.log(func());  // Uncaught SyntaxError: Identifier 'a' has already been declared
    

    // ******************************
    function func() { let a = 10; let a = 1; return a; } console.log(func()); // Uncaught SyntaxError: Identifier 'a' has already been declared
    function func(arg) {
      let arg; // 报错
    }
    
    function func(arg) {
      {
        let arg; // 不报错
      }
    }
    不能在函数内部重新声明参数

    3、为什么需要块级作用域

    3.1、内层变量可能会覆盖外层变量

    var a = 10;
    function func(){
        console.log(a)
        var a = 5;
    }
    func()   //undefined

    上面代码原因在于变量提升,导致内层的a变量覆盖了外层的a变量。

    3.2、用来计数的循环变量泄露为全局变量

    var s = 'hello';
    
    for (var i = 0; i < s.length; i++) {
      console.log(s[i]);
    }
    
    console.log(i);  // 5

    上面代码中,变量i只用来控制循环,但是循环结束后,它并没有消失,泄露成了全局变量。

    二、const

    const声明一个只读的常量。一旦声明,常量的值就不能改变。

    const PI = 3.1415926;
    PI   // 3.1415926
    
    PI = 3;  // TypeError: Assignment to constant variable.

    const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值

    const foo;
    // SyntaxError: Missing initializer in const declaration
    
    // 对于const来说,只声明不赋值,就会报错

    const的作用域与let命令相同:只在声明所在的块级作用域内有效。

    if (true) {
      const MAX = 5;
    }
    
    MAX // Uncaught ReferenceError: MAX is not defined
  • 相关阅读:
    网站设计的65条原则
    汇编指令: VERW、WAIT、WBINVD、WRSHR、WRMSR、XADD、XBTS、XCHG、
    openssl编程入门(含完整可编译和运行示例)
    揭开Linux的Swap之谜
    成功的 Web 应用系统性能测试
    加密通讯协议SSL编程周立发
    Google Sparse Hash
    测试 Linux 的可靠性
    进程绑定CPU简单应用
    mylarge&mymedium&mysmall&myinnodbheavy4G
  • 原文地址:https://www.cnblogs.com/huangjm263/p/9070440.html
Copyright © 2011-2022 走看看