zoukankan      html  css  js  c++  java
  • ECMAScript6入门系列一

    let 命令

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

        【注】:let与var相似,用来声明变量.但是只在它所在的代码块内有效

        for (let i = 0; i < 10; i++) {}
        console.log(i); //Uncaught ReferenceError: i is not defined
    console.log(foo); // 输出undefined
    console.log(bar); // 报错ReferenceError
    
    var foo = 2;
    let bar = 2;

        【注】:let不存在变量提升的概念

    if (true) {
      // TDZ开始
      tmp = 'abc'; // ReferenceError
      console.log(tmp); // ReferenceError
    
      let tmp; // TDZ结束
      console.log(tmp); // undefined
    
      tmp = 123;
      console.log(tmp); // 123
    }

            【注】:如果区块中存在letconst命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。这在语法上,称为“暂时性死区”(temporal dead zone,简称TDZ)。

        块级作用域

    // 报错
    function () {
      let a = 10;
      var a = 1;
    }
    
    // 报错
    function () {
      let a = 10;
      let a = 1;
    }

        【注】:let不允许在同一作用域内重复声明一个变量

    function f1() {
      let n = 5;
      if (true) {
        let n = 10;
      }
      console.log(n); // 5
    }

        【注】:let实际上给代码新增了块级作用域

    // IIFE写法 匿名函数
    (function () {
      var tmp = ...;
      ...
    }());
    
    // 块级作用域写法
    {
      let tmp = ...;
      ...
    }

        【注】:块级作用域使得匿名函数显得不是那么必要了

       ES5规范规定,函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域声明。(然后浏览器并不吃这一套,浏览器照样运行,除非在严格模式'use strict'下);而ES6引入了块级作用域的概念,则可以在块中声明函数,但是跟let一样,不可以在其他块中引用声明的函数,否则会报错(因为此规范影响大,具体还要看各浏览器对此的实现情况).

        例如:

    // 情况一
    if (true) {
      function f() {}
    }
    
    // 情况二
    try {
      function f() {}
    } catch(e) {
    }
    
    // ES6严格模式
    'use strict';
    if (true) {
      function f() {}
    }
    // 不报错

    const命令

        1.作用:声明一个常量,

        2.特点:

    • 一旦声明,常量的值不能改变.
    • const一旦声明变量,就必须立即初始化,不能留到以后赋值。
    • const的作用域与let命令相同:只在声明所在的块级作用域内有效。
    • const命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用。
    • const声明的常量,也与let一样不可重复声明。
    
    //eg.1
    const PI = 3.1415;
    PI // 3.1415
    
    PI = 3;
    // TypeError: Assignment to constant variable.
    
    //eg.2
    const foo;
    // SyntaxError: Missing initializer in const declaration
    
    //eg.3
    if (true) {
      const MAX = 5;
    }
    
    MAX // Uncaught ReferenceError: MAX is not defined
    
    //eg.4
    if (true) {
      console.log(MAX); // ReferenceError
      const MAX = 5;
    }
    
    //eg.5
    var message = "Hello!";
    let age = 25;
    
    // 以下两行都会报错
    const message = "Goodbye!";
    const age = 30;
    
    //eg.6
    const foo = {};
    foo.prop = 123;
    
    foo.prop
    // 123
    
    foo = {}; // TypeError: "foo" is read-only
    
    
    //eg.7
    const a = [];
    a.push('Hello'); // 可执行
    a.length = 0;    // 可执行
    a = ['Dave'];    // 报错

    先到这~

  • 相关阅读:
    sicily 1259. Sum of Consecutive Primes
    如何用enable_shared_from_this 来得到指向自身的shared_ptr 及对enable_shared_from_this 的理解
    mac 上使用octave的plot错误的解决办法
    sicily 1003. Hit or Miss
    动态规划 -- 钢条切割
    求解最大子数组问题 -- 暴力求解 和 分治法求解
    sicily 1193. Up the Stairs
    sicily 1017. Rate of Return
    sicily 1034. Forest
    打印pid,写着玩。
  • 原文地址:https://www.cnblogs.com/winyou/p/5647111.html
Copyright © 2011-2022 走看看