ECMAScript 概述

概述
  • ECMAScript通常看做JavaScript的标准化规范
  • 实际上JavaScript是ECMAScript的扩展语言
  • ECMAScript只是提供了最基本的语法
  • ES2015也称ES6,自此标准命名规则发生变化(之后命名都是带年份)
let
  • 最佳实践:不用var,主用const,配合let
箭头函数
  • 箭头函数会让我们的回调函数更简短,更易读
  • 箭头函数不会改变this的指向
  • 箭头函数的this指向定义时所在的作用域
    const cat = {
      lives: 9,
      jumps: () => {
        this.lives--;
      }
    }
    

    上面代码中,cat.jumps()方法是一个箭头函数,这是错误的。调用cat.jumps()时,如果是普通函数,该方法内部的this指向cat;如果写成上面那样的箭头函数,使得this指向全局对象,因此不会得到预期结果。这是因为对象不构成单独的作用域,导致jumps箭头函数定义时的作用域就是全局作用域。

对象字面量的增强
  • ES6 允许字面量定义对象时,用表达式作为对象的属性名,即把表达式放在方括号内。
let obj = {
  [propKey]: true,
  ['a' + 'bc']: 123,
  [Math.random()]: 222
};
proxy
  • defineProperty 只能监视属性的读写,proxy能够监视到更多对象的操作,也更好的支出数组对象的监视,proxy是以非侵入的方式监管了对象的读写
Reflect
  • Reflect内部封装了一系列对对象的底层操作
  • Reflect成员方法就是Proxy处理对象的默认实现
  • 统一提供一套用于操作对象的API
Promise
  • 解决了传统异步编程中回调函数嵌套过深的问题,提供更好的异步编程解决方案
  • axios 是支持同构的(Browser/node)
  • Promise.allSettled 不管中间任务成功与否都会成功(区别Promise.all)
  • Promise.all() 失败问题
    • 如果数组中任意一个任务失败就会导致整个任务失败,但是每个任务都会执行完
    • 对数组中的每一个promise 对象都去处理一下catch,确保不会出现异常
    • 也可以使用Promise.allSettled() 实现
宏、微任务执行流程问题
  • 微任务:本轮任务的末尾(调用栈的末尾)
  • 每一个任务(函数)的执行过程都有可能产生宏任务和微任务
  • 每个任务执行的最后,需要先执行完所有的微任务,再开始执行宏任务
  • 如果一个 Promise 被传递给一个 await 操作符,await 将等待 Promise 正常处理完成并返回其处理结果。

Generator /Async /Await

this指向问题

  • this的指向取决于执行,而不是调用
  • 全局(window、global) 严格模式---undefined
  • 箭头函数:沿着作用域向上找最近的一个function,看这个function最终是怎样执行的
lodash深拷贝
ES2018
  • 展开和剩余运算符的应用
  • 正则表达式的加强
  • Promise.prototype.finally
for-of
  • for...of循环是一种数据统一遍历方式
  • 实现iterable接口就是for...of的前提
原文链接:juejin.im

上一篇:从 QuickJS 源码理解 JavaScript 的闭包
下一篇:框架 DOM 渲染问题探究

相关推荐

官方社区

扫码加入 JavaScript 社区