zoukankan      html  css  js  c++  java
  • ES6学习之let

    块级作用域

    for(var i = 0; i < 10; i++){}
    console.log(i); //10
    
    for(let j = 0; j < 10; j++){}
    console.log(j); //"ReferenceError: j is not defined

    疑问: https://segmentfault.com/q/1010000004643248

    不存在变量提升

    console.log(a); // 输出undefined
    console.log(b); // 报错ReferenceError
    console.log(c); // 报错ReferenceError
    var a = 2;
    let b = 2;

    注意区别undefinedReferenceError

    暂时性死区(TDZ)

    只要进入当前块级作用域,所使用的变量已经存在了,但在声明之前都属于死区,不可进行操作。

    注意: typeof不再是100%安全的操作

    typeof x; // ReferenceError
    typeof y  // undefined
    let x;

    不允许重复声明

    let x = 1;
    let x; // "SyntaxError: Identifier 'x' has already been declared
    
    var y = 2;
    var y = 3; // y = 3

    块级作用域

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

    ES5的严格模式规定,函数只能在顶层作用域和函数内声明,其他情况(比如if代码块、循环代码块)的声明都会报错。

    // ES5
    'use strict';
    if (true) {
      function f() {} // 报错
    }

    ES6由于引入了块级作用域,这种情况可以理解成函数在块级作用域内声明,因此不报错,但是构成区块的大括号不能少

    // 报错
    'use strict';
    if (true)
      function f() {}

    声明的全局变量不再是window的属性

    "use strict";
    var a = 1;
    console.log(window.a) // 1
    
    let b = 1;
    console.log(window.b) // undefined


    参考:https://segmentfault.com/a/1190000004679743

     
  • 相关阅读:
    面试题
    网络编程
    python_控制台输出带颜色的文字方法
    httpie 101
    JSON Web Signature 规范解析
    Kong 系列 -- Kong 101
    关于过渡机制的一点理解
    XAML概览 1(译自JeremyBytes.com)
    awk与sed简明教程
    Connection failed: NT_STATUS_ACCOUNT_RESTRICTION
  • 原文地址:https://www.cnblogs.com/kunmomo/p/10191884.html
Copyright © 2011-2022 走看看