每日一篇——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)
    }
}
相关推荐
IT_陈寒6 小时前
SpringBoot自动配置坑了我三天,原来漏了这个注解
前端·人工智能·后端
逝水无殇7 小时前
HTML 文本格式化详解:掌握 <strong>、<em>、<mark>、<del> 等常用标签
前端·javascript·html
特立独行的猫a7 小时前
DeepSeek Harness插件和工具的区别介绍及开发入门指南
前端·ai·agent·插件·deepseek·harness
小新讲网安7 小时前
HTTP请求走私攻击实战:CL.TE与TE.CL绕过前端服务器全解析
服务器·前端·网络·web安全·http·架构·漏洞
艾莉丝努力练剑7 小时前
【QT:解决问题】Qt5Core.dll:无法定位程序输入点
java·开发语言·qt·学习·面试
风骏时光牛马7 小时前
AI办公系统异常事件复盘分析
前端
console.log('npc')7 小时前
React 19 + Vite 企业级前端项目:从零搭建到规范交付
前端·react.js·前端框架
程序员黑豆7 小时前
Java字符串常量池完全指南:原理、intern()方法与性能优化最佳实践
java·前端·ai编程
光影少年7 小时前
react离线缓存、图片缓存方案
开发语言·前端·javascript·react native·react.js·缓存·前端框架
Canace7 小时前
笔记本都合上了,Claude 为什么还能在手机上执行电脑上装的技能?
前端·人工智能·ai编程