每日一篇——23秋招JS面经(6)

每日一篇------23秋招JS面经(6)

⭐Promise程序阅读题

在这道题中不仅要注意同步任务、微任务和宏任务,还要注意微任务中promise的then也是异步的,也会有先后顺序,④处执行完返回后才直到⑤有没有机会执行,所以执行完4会执行6,接下来才轮到5,所以答案为172384650

⭐如何理解JS中的异步

JS是一门单线程语言,因为它运行在浏览器的渲染主线程中,而渲染主线程只有一个。

而渲染主线程承担着诸多工作,渲染页面,执行js都在其中执行。

如果用同步的方式,极有可能导致主线程产生阻塞,从而导致消息队列中很多任务无法及时执行。

所以浏览器就采取了异步措施,当某些异步任务触发时,如定时器、网络请求、事件监听器等,主线程就会将任务交给其他线程去处理,自身立即结束任务执行,转而执行后续任务,等到异步任务执行完毕,将事先传递的回调函数包装成任务,加入到对应队列(延时队列、微任务队列、交互队列)的末尾排队,等待主线程调度执行。

在这种异步模式下,浏览器就不会发生阻塞,保证了单线程的流畅运行。

⭐说一说事件循环

事件循环又叫消息循环,是浏览器渲染主线程的工作方式。

在Chrome的底层实现中,它开启了一个for的死循环,每次循环从消息队列中取出第一个任务执行,而其他线程只需要在合适的时机将任务放到消息队列中。

以前我们会将消息队列简单分为宏任务队列和微任务队列,现在随着浏览器环境愈发复杂,浏览器采用了更加灵活多变的处理方式。

根据W3C官方解释,每个任务都有不同的类型,同类型的任务须在同一个队列。不同的队列有不同的优先级(例如交互队列优先级大于延时队列),在一次事件循环中,由浏览器自行决定取哪一个队列的任务,但浏览器必须有一个微任务队列,且其优先级是最高的,必须优先调度执行。

⭐JS中的计时器能做到精确计时吗?

不可以

  1. 计算机中采用晶体振荡器来计时,虽然比较准确,但对比原子钟,精确度还是不足,且会受温度电压等因素影响,在计算机中通常会使用网络时间协议来进行校准。而js计时是调用操作系统中的计时函数,也就携带了些许偏差。
  2. 按照W3C标准,当浏览器中使用计时器,其嵌套层级超过五层时,之后的计时器就默认会有一个4ms的延迟,这4ms也会引起时间的偏差
  3. 而最主要的因素还是事件循环中,如果渲染主线程上有任务正在执行,就会推迟计时器的执行

⭐如何判断一个对象是否为空

如果使用常规的Object.getOwnPropertyNames()来判断,虽然可以将一般的不可枚举类型属性也判断出来,但无法判断继承的属性以及Symbol类型值定义的属性。所以我们需要使用Reflect.ownKeys()来进行转换,这样通过它返回的数组长度就能精准判断出对象是否为空。

⭐重写一下String.prototype.trim

1、正则

js 复制代码
String.prototype.trim = function() {
	return this.replace(/(^\s*)|(\s*$)/g, "")
}

2、双指针法

js 复制代码
String.prototype.trim = function() {
    while(this[0]===' ') {
        this = this.subString(1)
    }
    while(this[this.length-1]===' ') {
        this = this.subString(0, this.length-1)
    }
}
相关推荐
liliangcsdn1 分钟前
mac mlx大模型框架的安装和使用
java·前端·人工智能·python·macos
CssHero4 分钟前
基于vue3完成领域模型架构建设
前端
PanZonghui7 分钟前
用项目说话:我的React博客构建成果与经验复盘
前端·react.js·typescript
言兴10 分钟前
教你如何理解useContext加上useReducer
前端·javascript·面试
sunbyte14 分钟前
50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | GoodCheapFast(Good - Cheap - Fast三选二开关)
前端·javascript·css·vue.js·tailwindcss
7ayl14 分钟前
TCP 连接终止:四次挥手
面试
前端的日常15 分钟前
网页视频录制新技巧,代码实现超简单!
前端
前端的日常17 分钟前
什么是 TypeScript 中的泛型?请给出一个使用泛型的示例。
前端
今禾18 分钟前
一行代码引发的血案:new Array(5) 到底发生了什么?
前端·javascript·算法
倔强青铜三20 分钟前
苦练Python第25天:玩转字典
人工智能·python·面试