每日一篇——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)
    }
}
相关推荐
不简说3 分钟前
JS 代码技巧 vol.1 — 10 个让代码少写 30% 的小套路
前端·javascript·面试
Hilaku7 分钟前
为什么业务型前端容易遭遇中年危机?
前端·javascript·程序员
এ慕ོ冬℘゜16 分钟前
深度解析 JavaScript:赋予 Web 灵魂的“全栈语言”
开发语言·前端·javascript
iCOD3R18 分钟前
Skill - 3秒生成精美GitHub主页
前端·程序员·ai编程
Mr_凌宇21 分钟前
# AI 应用工程入门学习笔记 一
人工智能·面试·程序员
爱勇宝25 分钟前
《道德经》第5章:生产环境不相信眼泪
前端·后端·架构
掘金者阿豪29 分钟前
LEFT JOIN 凭空消失的背后,是优化器偷偷帮你做了决定
前端·后端
HackTwoHub37 分钟前
AntiDebug Mcp、AI逆向绕过前端,Hook 加密接口,抓取 Vue 路由漏洞,接入 MCP 让 AI 自动化挖掘前端漏洞
前端·vue.js·人工智能·安全·web安全·网络安全·系统安全
Mr_凌宇40 分钟前
AI 应用工程进阶扩展学习笔记 二
前端·面试
Hyyy1 小时前
Git Worktree 完全讲解
前端·后端·面试