美文网首页javascript
ES6知识点复习

ES6知识点复习

作者: solfKwolf | 来源:发表于2020-02-20 18:53 被阅读0次

变量提升

JavaScript代码在执行时会经历3个主要的步骤(比起那些编译过程只有三个步骤的语言的编译器,JavaScript引擎要复杂得多。例如,在语法分析和代码生成阶段有特定的步骤来对运行性能进行优化,包括对冗余元素进行优化等。)

分析一下代码:

console.log(a);
// ƒ a() {
//      console.log(111)
//    }
function a() {
  console.log(111)
}

 var a = 1
console.log(a)
// 1
    console.log(b)
    // undefined

    var b = function() {
      console.log(111)
    }

    var b = 2
// 未捕获异常
console.log(a);
// Uncaught ReferenceError: a is not defined
  var b = a
  // Uncaught ReferenceError: a is not defined
  console.log(b)

变量提升的优先级

  • 第一阶段:对所有函数声明进行提升(忽略表达式和箭头函数),引用类型的赋值(函数的声明,函数的提升代表着可执行,因为提升之后保持着引用)分为三步:

  • 开辟堆空间

  • 存储内容

  • 将地址赋值给变量

  • 第二阶段:对所有的变量进行提升,全部赋值为 undefined(如果已经存在,不赋值为undefined)。然后依次顺序执行代码。

PS:使用 let 和 const 时,我们不能在声明之前使用变量,这叫做暂时性死区。

var、let、const

var 存在变量提升,而 let、const 则不会。
var 声明的变量会挂载到 window 上,而其他两者不会。
let 和 const 的作用基本一致,后者声明的变量不能再次赋值(注意:但是能改变值)

Proxy

Proxy 代理

代理 proxy 是 ES6 新提出的。代理(proxy)使我们通过代理控制对另一个对象的访问。proxy 和 getter 以及 setter 的区别是,getter和 setter 仅仅控制的是单个对象属性,而 proxy 代理的是对象交互的通用处理,包括对象的方法。

用法

  • target:要进行代理的对象。
  • handler:是一个特定的对象,定义了特定行为时触发的函数。
var proxy = new Proxy(target, handler);

get 和 set 的参数

const obj = {name:'xiaolu'}
const representtive = new Proxy(obj, {
    get: (target, key) =>{
        return key in target ? target[key]:"不存在该值“
    },
    set: (target, key, value)=>{
        target[key] = value;
    }
})

ES6/7 的异步编程

主要是解决回调地狱问题

面试官:说说 Generator 是如何使用的?以及各个阶段的状态是如何变化的?

Generator

function* WeaponGenerator(){
    yield "1";
    yield "2";
    yield "3";
}

let weapon = WeaponGenerator();
console.log(weapon.next());
console.log(weapon.next());
console.log(weapon.next());

使用迭代器控制生成器。

  • 通过调用生成器返回一个迭代器对象,用来控制生成器的执行。
  • 调用迭代器的 next 方法向生成器请求一个值。
  • 请求的结果返回一个对象,对象中包含一个value值和 done布尔值,告诉我们生成器是否还会生成值。

Promise

面试官:说说 Promise 的原理?你是如何理解 Promise 的?

promise是为了解决回调地狱的问题。Promise 是异步编程的一种解决方案。

promise的状态

  • pending
  • resolved
  • rejected

then()和catch()

  • 如果异步操作抛出错误,状态就会变为Rejected,就会调用catch方法指定的回调函数,处理这个错误。
  • then方法指定的回调函数,如果运行中抛出错误,也会被catch方法捕获。
  • 在resolve()后面抛出的错误会被忽略(如果前面已经是执行了resolve,那么后面throw 出来的error不会被catch到)
  • catch方法返回的还是一个Promise对象,因此后面还可以接着调用then方法。
    在异步函数中抛出的错误不会被catch捕获到(例如使用了setTimeout之类的,抛出来的错误不会被catch到)
  • 有多个catch连写,如果在catch中继续throw出异常,那么后面的catch就会一直执行,如果不throw异常,则不会执行(catch其实是then的语法糖)

async 和 await

ES7 的 Async/Await 也是基于 promise 来实现的,可以理解成 async 函数会隐式地返回一个 Promise , await 后面的执行代码放到 then 方法中

模块化

模块化解决了命名冲突问题,可以提高代码的复用率,提高代码的可维护性。

函数

立即执行函数

// module.js文件
(function(window) {
  let name = 'xiaolu'
  // 暴露的接口来访问数据
  function a() {
    console.log(`name:${name}`)
  }
  //暴露接口
  window.myModule = { a } 
})(window)

Static

static关键字多用于静态方法和静态属性。

不同于普通在类中定义的会被实例继承的方法。在方法前加上static关键字。就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”。
class Foo {
  static classMethod() {
    return 'hello';
  }
}

Foo.classMethod() // 'hello'

var foo = new Foo();
foo.classMethod()
// TypeError: foo.classMethod is not a function

静态属性

静态属性指的是 Class 本身的属性,即Class.propName,而不是定义在实例对象(this)上的属性。

// 老写法
class Foo {
  // ...
}
Foo.prop = 1;

// 新写法
class Foo {
  static prop = 1;
}

exports和module.exports的区别

  • module.exports 默认值为{}
  • exports 是 module.exports 的引用
  • exports 默认指向 module.exports 的内存空间
  • require() 返回的是 module.exports 而不是 exports
  • 若对 exports 重新赋值,则断开了 exports 对 module.exports 的指向

commonjs和esmodule的区别

  • commonJs是被加载的时候运行,esModule是编译的时候运行
  • commonJs输出的是值的浅拷贝,esModule输出值的引用
  • commentJs具有缓存。在第一次被加载时,会完整运行整个文件并输出一个对象,拷贝(浅拷贝)在内存中。下次加载文件时,直接从内存中取值

import 和 require的区别

esmodule加载commonjs模块

module.exports 等同于 export default 可以用 import 引入

commonjs 模块加载 es6 模块

CommonJS 模块加载 ES6 模块,不能使用require命令,而要使用import()函数。

参考链接

相关文章

  • 004_ES6知识点总结(01)let及const声明

    ES6知识点整理 近期准备面试,把ES6的内容详细复习一遍整理来源素材:阮一峰《ES6标准入门》(第三版);htt...

  • ES6知识点复习

    变量提升 JavaScript代码在执行时会经历3个主要的步骤(比起那些编译过程只有三个步骤的语言的编译器,Jav...

  • 原型与原型链以及继承

    今天复习下原型与原型链的知识,以及记录新学的继承知识点。 知识点纲要 原型与原型链 es5与es6继承 什么是原型...

  • ES6知识点复习(三)

    字符串的新增方法 返回布尔值,表示是否找到了参数字符串。 返回布尔值,表示参数字符串是否在原字符串的头部。 返回布...

  • ES6知识点复习(二)

    变量的解构赋值 解构赋值允许指定默认值,es6内部使用严格相等运算符 === 默认值可以引用解构赋值的其他变量,但...

  • ES6知识点复习(一)

    let 命令 let 用于声明变量。用法类似于 var 只在let命令所在的代码块内有效。 常见对比例子(var,...

  • Java并发知识点快速复习手册(下)

    前言 本文快速回顾了常考的的知识点,用作面试复习,事半功倍。 面试知识点复习手册 已发布知识点复习手册 Java基...

  • 无标题文章

    综和复习本月知识点总结: 一:微信小程序 二:vue复习 三:js复习 四:新知识点 一:微信小程序知识点总结 开...

  • 2022年11月复习《独立思考》

    复习模板 日期: 分享者: 复习课程和知识点: 对知识点的理解(用你自己的话表达): 知识点的适用(使用)场景: ...

  • ES6面试、复习干货知识点汇总

    [Vue中文社区](javascript:void(0);) 今天 作者:StevenLikeWatermelon...

网友评论

    本文标题:ES6知识点复习

    本文链接:https://www.haomeiwen.com/subject/ziffqhtx.html