zoukankan      html  css  js  c++  java
  • es6-let

    http://es6.ruanyifeng.com/?search=fetch&x=0&y=0#docs/lethttp://es6.ruanyifeng.com/?search=fetch&x=0&y=0#docs/let
    ● ES6规定暂时性死区和let、const语句不出现变量提升,主要是为了减少运行时错误,防止在变量声明前就使用这个变量,从而导致意料之外的行为。这样的错误在ES5是很常见的,现在有了这种规定,避免此类错误就很容易了。
    总之,暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。

    ● IIFE(立即执行函数)主要目的是做的一些封装,防止污染,以及保证内部变量的安全
    闭包严格来说,是一个函数执行之后,返回另外一个函数,返回的函数有前一个函数的内部变量的引用

    块级作用域的出现,实际上使得获得广泛应用的立即执行匿名函数(IIFE)不再必要了。

    // IIFE写法
    (function () {
      var tmp = ...;
      ...
    }());
    
    // 块级作用域写法
    {
      let tmp = ...;
      ...
    }
    
    
    1. 允许在块级作用域内声明函数。
    2. 函数声明类似于var,即会提升到全局作用域或函数作用域的头部。
    3. 同时,函数声明还会提升到所在的块级作用域的头部。
      ● 注意,上面三条规则只对ES6的浏览器实现有效,其他环境的实现不用遵守,还是将块级作用域的函数声明当作let处理。
    //考虑到环境导致的行为差异太大,应该避免在块级作用域内声明函数。如果确实需要,也应该写成函数表达式,而不是函数声明语句。
    
    // 函数声明语句
    {
      let a = 'secret';
      function f() {
        return a;
      }
    }
    
    // 函数表达式
    {
      let a = 'secret';
      let f = function () {
        return a;
      };
    }
    
    
  • 相关阅读:
    Python深入05 装饰器
    Python深入04 闭包
    Python深入03 对象的属性
    Ubuntu (虚拟机同样) 更换内核?
    .out
    GCC 编译详解
    linux 编译内核 /boot空间不足?
    Java Swing提供的文件选择对话框
    Java Swing 实时刷新JTextArea,以显示不断append的内容?
    为什么要编译Linux内核?
  • 原文地址:https://www.cnblogs.com/sakura-sakura/p/6678500.html
Copyright © 2011-2022 走看看