ICode9

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

ES6、7面试题

2022-05-12 17:32:16  阅读:140  来源: 互联网

标签:ES6 面试题 函数 await exports let async Promise


let、const、var的区别?

  • let 和 const声明的变量不会出现提升,var声明的变量会出现提升(另外一种说法:let变量也会提升,只不过因为暂时性的限制,不能再let声明变量之前使用)
  • let 和 const是块级作用域,var是函数级作用域
  • let 和 const不允许重复声明(会抛出错误)
  • let 和 const声明变量之前使用,会抛出错误(暂时性死区)
  • const 声明一个只读的常量,一旦声明,不可以改变

 

 

Promise是什么?

定义:

Promise 是异步编程的一种解决方案

Promise 本身是同步立即执行函数,.then 是异步的

特点:

  1. 对象的状态不受外界影响
  2. 一旦状态改变就不会再变

三个状态:

pending(等待)、fulfilled(成功)、rejected(失败)

两个过程:

resolve 函数被执行时,会从pending 变成 fulfilled 成功

rejecte 函数被执行时,会从pending 变成 rejected 失败

 

 Promise的静态方法?

  • Promise.resolve()
  • Promise.reject()
  • Promise.all([promise1, promise2, promise3]) 是在所有promise都完成后执行。可以用于处理一些并发的任务 

 

async / await 是什么?

从内部实现来说其实就是Generator的语法糖,基于Promise,并于所有现存的基于Promise的API兼容

async关键字

  • async 关键字用于声明一个异步函数(如 async function test(){...})
  • async 会自动将常规函数转换成Promise,返回值也是一个Promise对象

await 关键字

  • await 用于等待异步功能执行完毕 (如 let res = await test())
  • await 只能再 async 函数内部使用
  • await 只能用与Promise 一起调用,await放置在Promise调用之前,会强制async函数中其他异步代码等待,直到Promise完成并返回结果

 

相较于Promise,async / await有何优势?

  • 代码清晰,提升了代码的阅读体验 (promise虽然摆脱了回调地狱,但then链式调用的阅读负担还是存在的)
  • 可以使用try / catch 进行错误处理(async / await 可以用成熟的try / catch做处理)
  • 调式时的阅读性,也相对更友好(调用多个Promise,Promise链中某个地方抛出错误,不会给出错误发生的位置,不能在.then代码块中设置断点)

缺点:try..catch内部的变量无法传递给下一个try...catch

箭头函数和普通函数的区别?

  • 箭头函数作为匿名函数,不能使用new 关键字
  • 箭头函数不绑定this ,会捕获上下文this,作为自己的this值,任何方法都改变不了this指向,(call(),bind(),apply())
  • 箭头函数不绑定arguments,用rest参数替代

普通函数:可以使用arguments,也可以使用rest

function showArgs(a,b,c){
  console.log(arguments[2]) // 3
}
showArgs(1,2,3)

 箭头函数:不绑定arguments,es6引入rest参数(形式为...变量名

let showArgs = (...args) => {
  console.log(args)
}
showArgs(1,2,3,4,5)

exports, module.exports, export defaul 区别?

  • exports:导出的是模块函数本身,可以有多个

    exports.func = function () {}

    引入(需要加括号):import {func} from './test'

  • module.exports:导出的是模块对象本身,当文件中出现多个,后面的module.exports会覆盖以前的

    module.exports = { func: function () {} }

    引入(可加可不加,不加就是引入模块对象本身):import module from './test'

  • export default:只能有一个

    export default function func() {console.log(1)}

    引入(不用加括号):import func from './test'

 

标签:ES6,面试题,函数,await,exports,let,async,Promise
来源: https://www.cnblogs.com/naturl/p/16263370.html

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

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

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

ICode9版权所有