前端面试-代码输出结果篇

414 阅读4分钟

本文章是个人刷题记录,刷题来源来自于: 「2021」高频前端面试题汇总之代码输出结果篇

一、异步&事件循环

说明:原文档里提供的输出答案有些未参照规范,比如出现了状态为resolved值(应该为fulfilled),输出结果最好亲自在浏览器控制台打印一下。

题号通过知识点第二次
1
2prosmise的返回
3在宏任务执行时,添加了一个微任务,此时是先执行这个微任务还是继续执行宏任务?
4考察Promise的静态方法resolve; 在当前宏任务执行时,添加了一个微任务,执行完当前宏任务后还有其他宏任务,此时是执行其他宏任务还是执行微任务?
5
6❌❌❌Promise.then参数为非函数(基础类型数据或各种状态的promise),将会如何?
7❌❌❌then中的回调函数里抛出错误(注意不是return错误)
8
9注意是return还是throw错误
10then方法可以返回promise对象,但是不能返回自身,否则会抛出错误。
11
12❌❌❌错误捕捉
13❌❌finally的返回值;注意多个then的执行顺序
14答案好像错误了,知晓all方法的源码
15❌❌看就完事了...注意all是捕捉第一个错误的,此时改变了就不再捕获第二个错误
16勉勉强强通过,15会了这题自然会了
17
18async,await后面的语句相当于放到了new Promise中,下一行及之后的语句相当于放在Promise.then中❌❌
19√,再看一遍
20❌❌❌❌❌❌√,再看一遍
21
22做对了,不过建议再看一遍
23❌❌❌❌❌❌async函数中抛错❌❌❌
24setTimeout里的console.log(p)执行了...
25
26与24一样;需要注意的是最后一个定时器打印出的p1其实是.finally的返回值
27process.nextTick是微任务
28
29
30
31promise执行器里resolve方法之后的代码还会执行
  • Promise的状态在发生变化之后,就不会再发生变化;
  • promise的构造函数中,在resolve方法的执行后,即状态改变时将promise.then推入微任务队列,此时还不会去执行这个微任务,还会执行resolve下行的同步代码;注意跟await不要混淆,看18、19题
  • 在执行宏任务时,创建了一个微任务,此时会继续执行完这个宏任务,再去执行微任务,再执行其他宏任务
  • Promise.resolve方法。参数如果是一个原始值,或者是一个不具有then方法的对象,则Promise.resolve方法返回一个新的Promise对象,状态为resolved,Promise.resolve方法的参数,会同时传给回调函数。 Promise.reject方法同理。
    • Promise.resolve('foo') 等价于 new Promise(resolve => resolve('foo'))
  • then方法。
    • 参数并非是一个函数(promise或原始值),它实际上会将其解释为then(null),这就会导致前一个Promise的结果会传递下面。

    • 如果方法返回的是一个Resolved状态/Rejected的Promise,其resolve或reject的参数值将会传递到下一个then方法的resolve或reject参数。如果方法返回的是一个pending状态的promise,下一个then方法返回的promise也是pending状态,两者同时更改状态。then方法没有返回值,则表示返回的是Promise{:undefined}。then方法可以返回promise对象,但是不能返回自身,否则会抛出错误。

    • then中的回调函数抛出一个错误,then返回的Promise将会成为Rejected状态,并且将抛出的错误作为Rejected状态的回调函数的参数值。错误值可以在下一个回调函数中用err.message取到。(注意是return还是throw错误)

二、this

题号通过知识点
1
2再看一下就知道了
3
4
6箭头函数父级构不成作用域
7立即执行匿名函数的this
8立即执行匿名函数的this
9grguments
10
11再看一遍
12
13
14
15

三、作用域&变量提升&闭包

题号通过知识点
1
2同1
3? 立即执行函数, 同8
4
5
6
7❌❌调用值赋值给了变量就形成了闭包,blog.csdn.net/Yannnnnm/ar…
8❌❌!!!与第三题一起看,还考察了类型转换,答案是:不同浏览器返回结果不同 JS中 [] == ![]结果为true,而 {} == !{}却为false, 追根刨底 —— 一道 JavaScript 面试题
  • 在 JavaScript中, Function 和 var 都会被提升(变量提升)

四、原型&继承

题号通过知识点
1再看一遍
2❌❌前端面试:经典面试题Foo与getName()
3❌❌
4
5再看一遍
6