每日一篇——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)
    }
}
相关推荐
Wect12 分钟前
LeetCode 97. 交错字符串:动态规划详解
前端·算法·typescript
木斯佳21 分钟前
前端八股文面经大全:字节暑期前端一面(2026-04-24)·面经深度解析
前端
凯瑟琳.奥古斯特22 分钟前
Redis是什么及核心特性
前端·css·redis·缓存
架构源启23 分钟前
OpenClaw 只能手动写脚本?我用 Chrome 插件实现了“录制即生成“
前端·人工智能·chrome·自动化
yingyima40 分钟前
正则表达式实战:如何高效清洗脏数据
前端
兔子零102442 分钟前
Ofox AI值得用吗?
前端·javascript·后端
We་ct1 小时前
React 性能优化精讲
前端·javascript·react.js·性能优化·前端框架·html·浏览器
云动课堂1 小时前
【运维实战】Nginx 高性能Web服务 · 一键自动化部署方案 (适配银河麒麟 V10 / openEuler / CentOS 7/8)
运维·前端·nginx
逻辑驱动的ken2 小时前
Java高频面试场景题19
java·开发语言·面试·职场和发展·求职招聘
大前端helloworld3 小时前
AI全自动实现Flutter蓝牙自动连接
前端