ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【考前必看二】面试前夕知识点梳理之ES6

2019-09-08 21:00:55  阅读:164  来源: 互联网

标签:知识点 resolve 函数 必看 ES6 对象 实例 Promise 方法


二、ES6

1. let、const 和 var

  • let 和 const 定义的变量不会出现变量提升,而 var 定义的变量会提升。
  • let 和 const 会出现暂时性死区,而 var 不会出现暂时性死区。
  • 在相同作用域中,let 和 const 不允许重复声明,var 允许重复声明。
  • let 和 const 在块级作用域内有效,而 var 在全局作用域有效。
  • const 声明变量时必须设置初始值
  • const 声明一个只读的常量,这个常量不可改变。如果它是一个复杂数据类型,那么只是指针常量指向的堆地址不变,堆地址中的内容仍然可变

2. 箭头函数

箭头函数的使用注意点:

(1)箭头函数中没有 this 对象

  • 箭头函数中的 this 对象,就是定义时所在的对象,而不是使用时所在的对象。
  • 箭头函数中 this 对象指向是固定的,这种特性有利于封装回调函数

(2)箭头函数中没有 arguments 对象

  • 箭头函数可以使用 rest 参数来代替。

(3)箭头函数中没有 arguments、super、new.target 这三个变量。

  • 箭头函数中的这三个变量,指向的其实是外层函数对应的变量。

(4)箭头函数不可以使用 call()、apply()、bind() 这些方法去改变 this 的指向。因为箭头函数没有自己的 this。

(5)箭头函数不可以使用 yield 命令。因此箭头函数不能用作 Generator 函数,也就是说,不可以使用 new 命令,否则会抛出一个错误。

箭头函数不适用的场合:

(1)第一个场合是定义对象的方法,且该方法内部包括 this

(2)第二个场合是需要动态 this 的时候,也不应使用箭头函数。

3. Promise对象

Promise 对象的含义

(1)Promise 对象是异步编程的一种解决方案。

(2)Promise 对象的两个特点:

  • 对象的状态不受外界影响。Promise 对象有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)
  • 对象的状态一旦改变,就不会再变,任何时候都可以得到这个结果。Promise 对象的状态改变,只有两种可能:从 pending变为 fulfilled 和从 pending 变为 rejected

(3)Promise 对象的优点:

  • Promise 对象,可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。
  • Promise 对象提供了统一的接口,各种异步操作都可以用同样的方法进行处理,使得控制异步操作更加容易。

(4)Promise 对象的缺点:

  • 无法取消 Promise,一旦新建它就会立即执行,无法中途取消。
  • 如果不设置回调函数,Promise 内部抛出的错误,不会反应到外部。
  • 当处于 pending 状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。

Promise 对象的基本用法

   ES6 规定,Promise 对象是一个构造函数,用来生成 Promise 实例。

   在创建 Promise 实例时,Promise 构造函数接受一个函数作为参数,该函数的两个参数分别是 resolve 和 reject。     

   Promise 实例生成以后,可以用 then 方法分别指定 resolved 状态和 rejected 状态的回调函数。其中,第二个函数是可选的。

(1)resolve 函数和 reject 函数的作用

  • resolve 函数的作用:将 Promise 对象的状态从“未完成”变为“成功”(即从 pending 变为 resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去。
  • reject 函数的作用:将 Promise 对象的状态从“未完成”变为“失败”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。

(2)resolve 函数和 reject 函数的参数

   如果调用 resolve 函数和 reject 函数时带有参数,那么它们的参数会被传递给回调函数。

  • reject 函数的参数通常是Error对象的实例,表示抛出的错误
  • resolve 函数的参数除了正常的值以外,还可能是另一个 Promise 实例

(3)resolve 函数和 reject 函数的注意点

   调用 resolve 或 reject 并不会终结 Promise 的参数函数的执行,最好在它们前面加上 return 语句

Promise 对象的方法

(1)Promise.prototype.then() 

  • then 方法的第一个参数是 resolved 状态的回调函数,第二个参数(可选)是 rejected 状态的回调函数。
  • then 方法返回的是一个新的 Promise 实例(注意,不是原来那个 Promise 实例)。因此可以采用链式写法,即 then 方法后面再调用另一个 then 方法。

(2)Promise.prototype.catch() 

   catch 方法是 .then(null,rejection) 或 .then(undefined,rejection) 的别名,用于指定发生错误时的回调函数。

  • 如果异步操作抛出错误,状态就会变为 rejected,就会调用 catch 方法指定的回调函数,处理这个错误。另外,then 方法指定的回调函数,如果运行中抛出错误,也会被 catch 方法捕获。
  • 如果 Promise 状态已经变成 resolved,再抛出错误无效的。
  • Promise 对象的错误具有“冒泡”性质
  • 一般来说,不要在 then 方法里面定义 Reject 状态的回调函数(即 then 的第二个参数),总是使用 catch 方法
  • 如果没有使用 catch 方法指定错误处理的回调函数,Promise 对象抛出的错误不会传递到外层代码,即不会有任何反应。
  • catch 方法返回的还是一个 Promise 对象,因此后面还可以接着调用 then 方法
  • catch 方法之中,还能再抛出错误。此时,可以再在后面加一个 catch 方法,用来捕获前一个catch 方法抛出的错误。

(3)Promise.prototype.finally()

   finally 方法用于指定不管 Promise 对象最后状态如何,都会执行的操作。

  • 这表明,finally 方法里面的操作,与状态无关,不依赖于 Promise 的执行结果。
  • finally 本质上是 then 方法的特例
  • finally 方法总是会返回原来的值

(4)Promise.all()

   Promise.all 方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。

  • Promise.all 方法接受一个数组作为参数,如果不是数组,但必须具有 Iterator 接口,且返回的每个成员都是 Promise 实例
  • 新的 Promise 实例 p 的状态由 p1p2p3决定,分成两种情况:只有 p1p2p3的状态都变成 fulfilled,p 的状态才会变成 fulfilled,此时 p1p2p3的返回值组成一个数组,传递给 p 的回调函数。只要 p1p2p3之中有一个被 rejected,p 的状态就变成 rejected,此时第一个被 reject 的实例的返回值,会传递给 p 的回调函数。
  • 如果作为参数的 Promise 实例,自己定义了 catch 方法,那么它一旦被 rejected,并不会触发 Promise.all() 的 catch 方法。如果 p2没有自己的 catch 方法,就会调用 Promise.all() 的 catch 方法。

(5)Promise.race() 

 Promise.race 方法与 Promise.all 方法基本相同,唯一的区别在于:

  • 只要 p1p2p3之中有一个实例率先改变状态,p 的状态就跟着改变。那个率先改变的 Promise 实例的返回值,就传递给p 的回调函数。(Promise.all 方法则必须等所有的状态都发生改变,才会将所有的返回值一起传递给回调函数。)

(6)Promise.resolve()

 有时需要将现有对象转为 Promise 对象,Promise.resolve 方法就起到这个作用。

 Promise.resolve 方法的参数分成四种情况。

  • 参数是一个 Promise 实例:原封不动地返回这个实例。
  • 参数是一个 thenable 对象( thenable 对象指的是具有 then 方法的对象):Promise.resolve 方法会将这个对象转为 Promise 对象,然后就立即执行 thenable 对象的 then 方法。
  • 参数不是具有 then 方法的对象,或根本就不是对象:如果参数是一个原始值,或者是一个不具有 then 方法的对象,则Promise.resolve 方法返回一个新的 Promise 对象,状态为 resolved,并会立即执行回调函数。
  • 不带有任何参数:直接返回一个 resolved 状态的 Promise 对象。

(7)Promise.reject()

  • Promise.reject(reason) 方法也会返回一个新的 Promise 实例,该实例的状态为 rejected。
  • Promise.reject() 方法的参数,会原封不动地作为 reject 的理由,变成后续方法的参数。这一点与 Promise.resolve 方法不一致。

(8)Promise.try()

   Promise.try 方法可以让同步函数同步执行,异步函数异步执行,并且让它们具有统一的 API。

END

标签:知识点,resolve,函数,必看,ES6,对象,实例,Promise,方法
来源: https://blog.csdn.net/Dora_5537/article/details/100111179

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有