zoukankan      html  css  js  c++  java
  • ES6基础

    JS为什么需要块级作用域(ES6引入let关键字的原因)?

    场景一:内层变量可能覆盖外层变量

    变量提升导致内层变量覆盖了外层变量
    
        var tmp = new Date();
        function f() {
          console.log(tmp);
          if (false) {
            var tmp = 'hello world';
          }
        }
        f(); // undefined
    

    场景二:用来计数的循环变量泄露为全局变量

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

    不再需要IIFE(立即调用函数表达式)

        (function () {
            statements
        })();
    

    块级作用域存在暂时性死区,且不存在变量提升

    关于顶层对象

    • ES6声明变量的六种方式:var function let const import class
    • var 和function兼容以前JS版本,全局变量依旧为顶层对象属性
    • let const class全局变量不属于顶层对象
    • ES6开始,全局变量和顶层对象属性逐渐脱离

    关于箭头函数

    • 函数体内的this对象指向函数定义时候的对象,ES5中this指向使用时候的对象
    • 箭头函数不可以作为构造函数,所以不能使用new
    • 不可以使用arguments对象,该对象在函数体内不存在,若要使用,可以使用rest参数替代
    • 不可以使用yield命令

    运行时加载和编译时加载

    • 运行时编译:AMD/CommonJS模式下,获取一个模块内某个方法,必须全部加载整个模块对象后,才可以获取到,依赖关系只能在运行时获取,此种类型称为运行时加载
    • 编译时加载:ES6中的模块功能,趋向于静态化,通过export和import方法,使得模块加载在编译时候就能完成,需要哪个加载哪个,因此加载效率比AMD或CommonJS要高。由于ES6的模块化是在编译时候进行,因此可以进行代码静态分析,引入宏或类型校验等。
    // CommonJS模块
    let { stat, exists, readFile } = require('fs');
    // 等同于
    let _fs = require('fs');
    let stat = _fs.stat;
    let exists = _fs.exists;
    let readfile = _fs.readfile;
    CommonJS先加载整个模块对象,然后从对象中获取所需方法,此过程只能在运行时加载
    
    import { stat, exists, readFile } from 'fs';
    ES6中单独加载所需模块
    
    • 宏:将一些命令组织到一起作为一个单独命令完成一个特定的任务。

    ES6模块化的好处:

    • 不再需要UMD(通用模块规范)格式整合AMD和CommonJS了,服务器和浏览器统一使用ES6模块化加载方式
    • 浏览器新的API就可以用模块化格式提供,而非做成全局变量或者navigator的属性
    • 不再需要命名空间,eg:Math等,
  • 相关阅读:
    luogu P4544 [USACO10NOV]Buying Feed G 斜率优化dp 双层?
    luogu P3594 [POI2015]WIL-Wilcze doły 单调队列dp+双指针
    luogu P2384 最短路 spfa+数学?
    luogu P2071 座位安排 二分图最大匹配 双重的
    luogu P1841 [JSOI2007]重要的城市 dp+Floyd
    luogu P2034 选择数字 单调队列优化dp 脑残行为,导致wa了很多遍
    【最短路-判断正权环 Floyd】Currency Exchange POJ
    【最短路-判断正权环 Bellman-Ford】Arbitrage POJ
    【最短路/矩阵+最小环】0 or 1 HDU
    【最短路+区间枚举】昂贵的聘礼 POJ
  • 原文地址:https://www.cnblogs.com/nanhuaqiushui/p/11774270.html
Copyright © 2011-2022 走看看