代码输出结果题型总结

异步 & 事件循环

  • 宏任务队列(setTimeout)、微任务队列(then、process.nextTick()),每轮事件循环找到宏任务,宏任务执行完后,执行微任务
    在这里插入图片描述

  • new Promise 中调用 resolvereject 或 返回一个 Promise 才可以执行 then,then 的 return 值会被包装成 Promise 对象

  • 输出的样子
    在这里插入图片描述
    在这里插入图片描述

  • then方法接受的参数是函数,而如果传递的并非是一个函数,它实际上会将其解释为then(null),这就会导致前一个Promise的结果会传递下面

  • throw new Error(‘error!!!’) 或 reject(“error!!!”)

会输出 Uncaught (in promise) Error: error!!!

  • .then 或 .catch 返回的值不能是 promise 本身,否则会造成死循环
  • 每一次 .then 都会在下一轮微任务执行,.then.then… 是很多轮微任务
  • 在 Promise 中抛出错误会被 catch 捕获或 Then 第二个参数

async await

  • 停止执行 async 区域中 await 后的代码被阻塞,之后跳出 async 区域,会继续执行执行后面的同步代码,如果 async 区域中没有 await,异步代码执行方式,如果 wait 后面是 Promise,那这个 Promise 如果是 pending/reject 状态,await 后面的代码不会继续执行。如果这个错误被捕获了,那么后面的可以正常输出 await Promise.reject('error!!!').catch(e => console.log(e))
  • 如果 async 中的 return 会被包装成 Promise

this

  • this 指向跟调用无关,跟所处位置有关
  • 箭头函数是不绑定this的,它的this来自原其父级所处的上下文,对象不构成单独的作用域【function 构成独立作用域】,所以箭头的函数的this就指向了全局作用域window
  • 严格模式【'use strict';】 this 的值不会为 window
  • 每个 function 都会有自己独立的上下文,根上下文的 this 是 window,根据调用方式初始化每个作用域中的this值,如果没有就是 window
  • this绑定的优先级:new绑定 > 显式绑定【var bar = foo.call(obj2)】 > 隐式绑定 【obj1.foo()】> 默认绑定【window】

作用域&变量提升&闭包

  • var x = y = 1; 实际上这里是从右往左执行的,首先执行y = 1,然后第二步是将y赋值给x
  • 如果没有赋值是 undefined,如果没有定义【Uncaught ReferenceError: x is not defined】
  • Function 和 var 都会被提升(变量提升)
  • js中变量的作用域链与定义时的环境有关,与执行时无关

原型&继承

  • var F = function() {}; var f = new F();

f 原型是 Object,F 是 Function 的实例

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值