es6
1. var、let、const之间的区别
var声明变量可以重复声明,而let不可以重复声明
var是不受限于块级的,而let是受限于块级
var会与window相映射(会挂一个属性),而let不与window相映射
var可以在声明的上面访问变量,而let有暂存死区,在声明的上面访问变量会报错
const声明之后必须赋值,否则会报错
const定义不可变的量,改变了就会报错
const和let一样不会与window相映射、支持块级作用域、在声明的上面访问变量会报错
2、使用箭头函数应注意什么?
(1)用了箭头函数,this就不是指向window,而是父级(指向是可变的)
(2)不能够使用arguments对象
(3)不能用作构造函数,这就是说不能够使用new命令,否则会抛出一个错误
(4)不可以使用yield命令,因此箭头函数不能用作 Generator 函数
3.setTimeout、Promise、Async/Await 的区别
事件循环中分为宏任务队列和微任务队列
其中setTimeout的回调函数放到宏任务队列里,等到执行栈清空以后执行promise.then里的回调函数会放到相应宏任务的微任务队列里,等宏任务里面的同步代码执行完再执行async函数表示函数里面可能会有异步方法,await后面跟一个表达式
async方法执行时,遇到await会立即执行表达式,然后把表达式后面的代码放到微任务队列里,让出执行栈让同步代码先执行4.es6的导入导出模块
// 只导入一个 import {sum} from "./example.js" // 导入多个 import {sum,multiply,time} from "./exportExample.js" // 导入一整个模块 import * as example from "./exportExample.js"
//可以将export放在任何变量,函数或类声明的前面 export var firstName = 'Michael'; //也可以使用大括号指定所要输出的一组变量 var firstName = 'Michael'; var lastName = 'Jackson'; export {firstName, lastName}; //使用export default时,对应的import语句不需要使用大括号 let bosh = function crs(){} export default bosh; import crc from 'crc'; //不使用export default时,对应的import语句需要使用大括号 let bosh = function crs(){} export bosh; import {crc} from 'crc';
5.常见 Promise 面试题
为了解决异步接口回调地狱问题,
Promise 是异步编程的一种解决方案,,有三种状态,pending(进行中)、resolved(已完成)、rejected(已失败)
// 语法 var promise = new Promise((resolve, reject) => {/* executor函数 */ // ... some code if (/* 异步操作成功 */){ resolve(value); } else { reject(error); } }); promise.then((value) => { //success }, (error) => { //failure })
请求1(function(请求结果1){ 请求2(function(请求结果2){ 请求3(function(请求结果3){ 请求4(function(请求结果4){ 请求5(function(请求结果5){ 请求6(function(请求结果3){ ... }) }) }) }) }) })new Promise(请求1) .then(请求2(请求结果1)) .then(请求3(请求结果2)) .then(请求4(请求结果3)) .then(请求5(请求结果4)) .catch(处理异常(异常信息))// 告诉保姆帮我做几件连贯的事情,先去超市买菜
异步:return new Promise
同步: return
new Promise(买菜) //用买好的菜做饭 .then((买好的菜)=>{ return new Promise(做饭); }) //把做好的饭送到老婆公司 .then((做好的饭)=>{ return new Promise(送饭); }) //送完饭后打电话通知我 .then((送饭结果)=>{ 电话通知我(); })(async ()=>{ let 蔬菜 = await 买菜(); let 饭菜 = await 做饭(蔬菜); let 送饭结果 = await 送饭(饭菜); let 通知结果 = await 通知我(送饭结果); })();
function promiseGet (url) { return new Promise((resolve, reject) => { let xhr = new XMLHttpRequest() xhr.open('GET', url, true) xhr.onreadystatechange = function () { if (this.readyState === 4) { if (this.status === 200) { resolve(this.responseText,this) } else { let resJson = { code: this.status, response: this.response } reject(resJson, this) } } } })