JavaScript:底层原理与面试深度知识点
第十四阶段底层原理与面试深度知识点JS 执行上下文、执行栈、变量对象 VO、活动对象 AO执行上下文是什么执行上下文是 JavaScript 执行一段代码时的运行环境它定义了变量、函数声明和 this 值的作用域。有三种类型全局执行上下文、函数执行上下文和 eval 执行上下文较少用。为什么它为代码的执行提供了一个独立的环境确保变量和函数在正确的作用域内访问和执行避免不同部分代码之间的干扰。怎么工作当 JavaScript 引擎开始执行代码时首先创建全局执行上下文并压入执行栈。每当调用一个函数就会为该函数创建一个新的执行上下文并压入栈顶函数执行完毕后其执行上下文从栈顶弹出。执行栈是什么也叫调用栈是一种后进先出LIFO的数据结构用于存储执行上下文。为什么它管理着代码的执行顺序保证函数调用和返回的正确流程。怎么工作函数调用时其执行上下文被压入栈顶成为当前正在执行的上下文。函数执行结束该上下文从栈顶弹出控制权返回给之前的上下文。变量对象 VO是什么在全局执行上下文中变量对象就是全局对象在浏览器中是window。在函数执行上下文中变量对象是一个包含函数参数、函数声明和变量声明的对象。为什么它存储了当前执行上下文中的所有变量和函数声明方便在执行过程中查找和访问。怎么工作在函数执行上下文创建阶段会扫描函数的参数、函数声明和变量声明将它们添加到变量对象中。变量声明会被提升值为undefined函数声明会被完整提升。活动对象 AO是什么活动对象是函数执行上下文中的变量对象当函数进入执行阶段变量对象被激活就成为活动对象。为什么在执行阶段活动对象用于存储函数执行过程中的实际数据与创建阶段的变量对象有所不同它包含了函数实际执行时的参数值等。怎么工作在函数执行上下文中创建阶段的变量对象在进入执行阶段后成为活动对象此时函数参数被赋值变量开始实际参与运算。作用域链创建过程是什么作用域链是一个由多个作用域对象组成的链表用于在查找变量和函数时确定访问顺序。为什么它决定了在何处查找变量和函数保证了代码在不同作用域下的正确访问。怎么创建每个执行上下文都有一个与之关联的作用域链。函数执行上下文的作用域链其最前端是该函数的活动对象AO如果存在闭包还会包含父函数的活动对象依次向上直到全局执行上下文的变量对象VO。例如functionouter(){letouterVarouter;functioninner(){letinnerVarinner;console.log(outerVar);}inner();}outer();在inner函数执行时其作用域链为inner 函数的 AO- outer 函数的 AO- 全局 VO。当查找outerVar时先在inner函数的 AO 中找没找到则到outer函数的 AO 中找最终找到。原型链完整查找流程是什么原型链是通过原型对象将对象连接起来的链状结构用于实现继承和属性查找。为什么它使得对象可以访问其原型对象上的属性和方法实现代码复用和继承机制。怎么查找当访问一个对象的属性或方法时首先在该对象自身的属性中查找。如果没找到就到其原型对象__proto__中查找。如果原型对象中也没找到就继续到原型对象的原型对象中查找以此类推直到找到或到达Object.prototype如果Object.prototype中也没有则返回undefined。例如functionAnimal(name){this.namename;}Animal.prototype.speakfunction(){return${this.name}makes a sound.;};functionDog(name,breed){Animal.call(this,name);this.breedbreed;}Dog.prototypeObject.create(Animal.prototype);Dog.prototype.constructorDog;constmyDognewDog(Buddy,Golden Retriever);console.log(myDog.speak());这里myDog对象查找speak方法先在自身找没找到通过__proto__到Dog.prototype找还没找到再通过Dog.prototype.__proto__到Animal.prototype找到。Event Loop 完整执行流程浏览器 Node 对比浏览器中的 Event Loop是什么浏览器的 Event Loop 用于协调事件、用户交互、脚本执行、渲染和网络请求等。为什么由于 JavaScript 是单线程的Event Loop 机制使得 JavaScript 可以处理异步操作不会阻塞主线程。怎么执行执行栈Call Stack同步任务在此执行当函数调用时函数压入栈顶执行完毕后弹出。任务队列Task Queue也叫宏任务队列异步操作如setTimeout、setInterval、DOM 事件等完成后其回调函数会被放入任务队列。微任务队列Microtask Queue一些异步操作如Promise.then、MutationObserver等的回调会被放入微任务队列。流程首先执行栈中的同步任务当执行栈为空时检查微任务队列依次执行微任务队列中的任务直到微任务队列为空。然后从任务队列中取出一个宏任务放入执行栈执行执行完后再次检查微任务队列并执行如此循环。Node 中的 Event Loop是什么Node.js 的 Event Loop 同样用于处理异步操作但内部实现和浏览器略有不同。为什么为 Node.js 提供异步 I/O 等功能使其能高效处理大量并发请求。怎么执行Node 的 Event Loop 有多个阶段如timers处理setTimeout和setInterval、I/O callbacks处理大部分 I/O 回调、idle, prepare系统内部使用、poll获取新的 I/O 事件、check执行setImmediate回调、close callbacks处理关闭的回调如socket.on(close,...)。流程进入timers阶段检查是否有到期的定时器执行其回调。然后进入I/O callbacks阶段执行一些系统操作的回调。接着进入poll阶段等待新的 I/O 事件若有则执行其回调。如果poll队列为空且有setImmediate回调则进入check阶段执行setImmediate回调。最后进入close callbacks阶段处理关闭相关回调。在每个阶段执行完后都会执行微任务队列中的任务。对比浏览器的 Event Loop 相对简单主要围绕 DOM 相关事件和网络请求等。Node 的 Event Loop 更复杂需要处理各种 I/O 操作和系统调用。在 Node 中setImmediate和process.nextTick是特殊的异步操作。process.nextTick的回调会在当前阶段所有同步任务和微任务执行完毕后立即执行优先级高于setImmediate。而setImmediate的回调会在poll阶段空闲时或I/O操作完成后执行。宏任务微任务优先级细节宏任务常见的宏任务有setTimeout、setInterval、setImmediateNode 环境、I/O操作、UI rendering浏览器环境等。宏任务在一个事件循环中当执行栈为空且微任务队列为空时从宏任务队列中取一个任务放入执行栈执行。微任务常见的微任务有Promise.then、MutationObserver浏览器环境、process.nextTickNode 环境等。微任务在执行栈为空时立即执行即在当前宏任务执行完后下一个宏任务执行前会先执行微任务队列中的所有任务。所以微任务优先级高于宏任务。例如console.log(同步任务);setTimeout((){console.log(宏任务 setTimeout);},0);Promise.resolve().then((){console.log(微任务 Promise.then);});输出顺序为“同步任务”- “微任务 Promise.then”- “宏任务 setTimeout”。函数提升、变量提升底层原理函数提升是什么在 JavaScript 代码执行前函数声明会被提升到其所在作用域的顶部使得在函数声明之前就可以调用该函数。为什么这是 JavaScript 引擎为了方便函数调用而采用的机制让开发者在代码组织上更灵活。底层原理在执行上下文创建阶段函数声明会被完整地添加到变量对象VO或活动对象AO中而不仅仅是声明提升函数体也会被提升。例如func();functionfunc(){console.log(函数被调用);}这里func函数在声明之前被调用因为函数声明被提升到了作用域顶部。变量提升是什么变量声明会被提升到其所在作用域的顶部但变量的值不会被提升即变量在声明前访问值为undefined。为什么同样是为了在代码执行前预先处理变量声明保证代码执行逻辑的一致性。底层原理在执行上下文创建阶段变量声明会被添加到变量对象VO或活动对象AO中初始值设为undefined。例如console.log(a);vara10;这里会输出undefined因为var a被提升但a 10不会提升。Promise 微任务调度机制是什么Promise 是 JavaScript 中处理异步操作的一种方式其then方法的回调会被放入微任务队列。为什么这样可以保证在当前宏任务执行完后以异步且优先于下一个宏任务的方式执行then回调使得异步操作的处理更有序和高效。怎么调度当Promise被resolve或reject时then方法注册的回调函数不会立即执行而是被放入微任务队列。当执行栈为空时JavaScript 引擎会检查微任务队列并依次执行其中的回调函数。例如console.log(同步任务);Promise.resolve().then((){console.log(Promise 微任务);});console.log(同步任务);输出顺序为“同步任务”- “同步任务”- “Promise 微任务”。类与原型底层等价转换class 本质是语法糖是什么ES6 的class语法是基于原型继承的语法糖它让 JavaScript 的面向对象编程更接近传统面向对象语言的写法但底层仍然是基于原型的机制。为什么class语法提供了更简洁、直观的面向对象编程方式同时保持了 JavaScript 基于原型继承的核心特性方便开发者理解和编写面向对象代码。底层等价转换例如// class 写法classAnimal{constructor(name){this.namename;}speak(){return${this.name}makes a sound.;}}// 等价的原型写法functionAnimalProto(name){this.namename;}AnimalProto.prototype.speakfunction(){return${this.name}makes a sound.;};这里class Animal本质上就是对AnimalProto函数及其原型操作的一种语法封装class的constructor对应函数的参数和内部赋值class的方法定义对应在原型上添加方法。可迭代协议、迭代器协议底层规范可迭代协议是什么可迭代协议定义了对象如何成为可迭代对象。一个对象要成为可迭代对象必须实现Symbol.iterator方法该方法返回一个迭代器对象。例如constmyArray[1,2,3];constiteratormyArray[Symbol.iterator]();console.log(iterator.next());console.log(iterator.next());console.log(iterator.next());console.log(iterator.next());这里数组是可迭代对象因为它实现了Symbol.iterator方法。为什么可迭代协议使得对象可以在for...of循环、Array.from等场景中使用统一了对象的遍历方式。迭代器协议是什么迭代器协议定义了迭代器对象的行为。迭代器对象必须有一个next方法该方法返回一个包含value和done属性的对象。value是迭代的当前值done是一个布尔值表示迭代是否结束。为什么它为对象的迭代提供了一种标准的接口使得不同类型的对象都能以一致的方式进行遍历。模块化加载机制ES Module 与 CommonJS 差异加载时机ES Module静态加载在编译阶段就确定模块的依赖关系和导入导出。这使得可以进行一些编译时优化如 tree- shaking去除未使用的代码。例如import{func}from./module.js;// 这里在编译时就确定了依赖关系CommonJS动态加载在运行时才确定模块的依赖关系和导出。例如constmodulerequire(./module.js);// 这里在运行时才加载模块导出方式ES Module有默认导出export default和具名导出export。例如// 具名导出exportconstfunc1()console.log(Func1);// 默认导出exportdefault()console.log(Default export);CommonJS通过module.exports或exports导出。例如functionfunc1(){console.log(Func1);}exports.func1func1;// 或者module.exports{func1:function(){console.log(Func1);}};导入方式ES Module使用import导入。例如import{func1}from./module.js;importmyDefaultfrom./module.js;CommonJS使用require导入。例如const{func1}require(./module.js);constmyModulerequire(./module.js);循环依赖处理ES Module在静态分析阶段就处理循环依赖对于已经加载但未完全求值的模块会先使用其部分值等模块完全求值后再更新。CommonJS如果遇到循环依赖在加载模块时会先返回一个未完全初始化的模块对象可能导致获取到的值不正确。例如// a.jsconstbrequire(./b.js);console.log(a.js:,b.value);exports.valuea 的值;// b.jsconstarequire(./a.js);console.log(b.js:,a.value);exports.valueb 的值;在 CommonJS 中a.js中打印b.value可能得到undefined而 ES Module 对这种情况有更合理的处理方式。实战练习混合多层 Promise、定时器、同步代码手动推导打印顺序将 class 语法手动转换为原生构造函数 原型代码思考题变量提升底层原理是什么Promise.then 为什么属于微任务ES Module 加载是同步还是异步

相关新闻

十年深海潜伏,一朝蓝海亮剑:蓝塞夫创始人的长期主义哲学

十年深海潜伏,一朝蓝海亮剑:蓝塞夫创始人的长期主义哲学

在餐饮连锁行业普遍追求"唯快不破"、用资本换速度、用补贴换流量的时代背景下,蓝塞夫的创业故事听起来多少有些不合时宜,甚至带有一点反潮流的执拗。品牌的正式名称在市场上亮相不过短短数年,但为了这次亮相所进行的准备工作&#…

2026/8/3 5:59:54 阅读更多 →
二叉树算法精讲:翻转、对称与深度计算

二叉树算法精讲:翻转、对称与深度计算

1. 二叉树基础与算法训练营概览作为数据结构中最经典的树形结构之一,二叉树在算法面试和实际工程中都有着举足轻重的地位。代码随想录算法训练营第14天的内容聚焦于二叉树的四个经典问题:翻转、对称判断以及深度计算。这些题目看似基础,却涵盖…

2026/8/3 5:59:53 阅读更多 →
MATLAB泊松回归建模与计数数据分析实战

MATLAB泊松回归建模与计数数据分析实战

1. 线性泊松回归的核心原理与应用场景计数型数据在科研和工程领域无处不在——从每天接到的客服电话数量到流行病学中的病例统计,这类数据都有一个共同特点:它们都是非负整数。传统的最小二乘回归在处理这类数据时往往会给出不合理的预测值(比…

2026/8/3 5:59:53 阅读更多 →

最新新闻

SpringBoot学生宿舍管理系统设计与实现

SpringBoot学生宿舍管理系统设计与实现

1. 项目概述与核心价值 这个基于SpringBoot的学生宿舍管理系统是我在指导毕业设计过程中反复打磨的典型案例,它完美解决了高校后勤管理中的三大痛点:手工登记效率低下、数据统计滞后、安全隐患难追溯。系统采用B/S架构,前端用Thymeleaf模板引…

2026/8/4 15:37:54 阅读更多 →
三步上手:xmly-downloader-qt5喜马拉雅音频批量下载完整指南

三步上手:xmly-downloader-qt5喜马拉雅音频批量下载完整指南

三步上手:xmly-downloader-qt5喜马拉雅音频批量下载完整指南 【免费下载链接】xmly-downloader-qt5 喜马拉雅FM专辑下载器. 支持VIP与付费专辑. 使用GoQt5编写(Not Qt Binding). 项目地址: https://gitcode.com/gh_mirrors/xm/xmly-downloader-qt5 喜马拉雅F…

2026/8/4 15:37:54 阅读更多 →
CQUThesis终极指南:3步快速完成重庆大学毕业论文专业排版

CQUThesis终极指南:3步快速完成重庆大学毕业论文专业排版

CQUThesis终极指南:3步快速完成重庆大学毕业论文专业排版 【免费下载链接】CQUThesis :pencil: 重庆大学毕业论文LaTeX模板---LaTeX Thesis Template for Chongqing University 项目地址: https://gitcode.com/gh_mirrors/cq/CQUThesis 还在为毕业论文格式调…

2026/8/4 15:37:54 阅读更多 →
【计算机毕业设计】基于Web的闲置电子产品交易网站的设计与实现

【计算机毕业设计】基于Web的闲置电子产品交易网站的设计与实现

1.系统介绍随着数字电子产品更新迭代速度加快,闲置电子产品积压问题日益突出,传统线下交易模式存在信息不对称、交易效率低、地域限制等痛点,难以满足用户对闲置电子产品规范化、便捷化交易的需求。在此背景下,开发一套适配Web端的…

2026/8/4 15:37:54 阅读更多 →
网络安全期刊投稿指南:从实验设计到审稿应对

网络安全期刊投稿指南:从实验设计到审稿应对

1. Cybersecurity期刊概述与核心价值 Cybersecurity作为网络空间安全领域的权威学术期刊,由Springer Nature出版集团发行,是首批专注于网络攻防技术、安全协议分析和威胁情报研究的国际性专业期刊。创刊于2018年,目前已被EI、Scopus等主流数据…

2026/8/4 15:37:54 阅读更多 →
电商平台系统是什么?从零理解电商数字化运营的核心基础设施

电商平台系统是什么?从零理解电商数字化运营的核心基础设施

"一个做线下批发做了十几年的老板,去年开始做电商——在淘宝开了一个店、抖音开了两个号。他跟我说了一句话,我觉得概括了所有传统老板转型电商的真实困境:我以前管一个仓库、十几个员工——每天早上到公司转一圈就知道今天什么情况。现…

2026/8/4 15:36:54 阅读更多 →

日新闻

AI Agent白手起家26: 使用标准事件驱动大模型实践

AI Agent白手起家26: 使用标准事件驱动大模型实践

纲要 练习目标:掌握大模型标准事件的调用回顾 LangChain 中的核心标准事件 invokestreambatchastream_eventswith_structured_output 环境准备实战代码:多种事件调用对比 同步调用与流式输出批量处理异步事件流监听结构化输出 运行说明与预期结果总结与扩…

2026/8/4 0:00:40 阅读更多 →
dealsea是什么?跨境卖家必知的美国deal站入门指南

dealsea是什么?跨境卖家必知的美国deal站入门指南

说实话,第一次听说美国这个老牌折扣网站的跨境卖家,十个有八个会问同一个问题:这个平台到底是干嘛的?我见过一个做家居出口的朋友,他在亚马逊上月销二十万美金,却从来没用过它。我给他看了首页——一屏一屏…

2026/8/4 0:01:40 阅读更多 →
清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

通讯作者:邓兵、刘建国通讯单位:清华大学DOI:https://doi.org/10.1021/acs.est.6c00603研究背景稀土元素(REEs)是清洁能源技术与电子器件不可或缺的核心原料,然而传统提取方式依赖能耗高、排放大的采矿与强…

2026/8/4 0:01:40 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/4 13:24:41 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/4 11:41:39 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →