前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
首页程序员面试题库第 47 页
面试知识索引 · 分类、标签与搜索

5000+ 道程序员面试题,每题都有完整答案

程序员面试题库第 47 页,收录第 2301–2350 题,共 5000 道完整解析,覆盖前端、JavaScript、React、Vue、Node.js、AI Agent、网络、数据库与系统设计。

5000+完整问题
52技术分类
178检索标签
100索引分页
按分类建立知识面,再用标签和搜索定位问题

每页只渲染 50 道题。分类与标签分页可抓取,自由搜索结果不会制造无限 SEO 页面。

快速定位

分类、标签与关键词搜索

题库检索
技术分类52 个
全部分类5000AI Agent511浏览器301JavaScript285React281AI 开发262CSS240Node.js217TypeScript206Vue180前端工程化138React Native135
查看全部 52 个分类
操作系统135数据库134Docker95计算机网络94API 设计90Kubernetes90HTML89Redis89全栈开发88分布式系统88系统设计86HTTP85Next.js60Angular58Linux53Nuxt51PostgreSQL46可观测性46设计模式46小程序45身份与权限45无障碍44MongoDB43PWA43Web 安全43Git42前端测试42前端性能41WebAssembly40测试40AI 工程37SvelteKit37Go35前端数据管理30React Router29AI 全栈28Svelte27算法12Java10数据结构5前端手写题3
热门标签178 个
并发编程448缓存355性能优化340安全336异步编程292类型系统215构建工具211容器化184流处理177表单157SQL148HTTP141路由140离线应用121网络协议111
查看其余 163 个标签
测试109数据库事务95实时通信92Web 可访问性90动画79可观测性77Agent 记忆75向量检索66工具调用66LangGraph59Prompt56任务规划53排障与运维53数据库索引52浏览器自动化51Flexbox50值与类型50GraphQL49事务与并发49构建与镜像49DNS 与 TLS48工程协作与交付48AI 评测47CSS Grid47Express 服务47MCP47副作用与同步47向量与嵌入47文件与多媒体47流与二进制47传输与协议46列表与性能46可维护代码46响应式原理46容器运行46指标日志追踪46数据建模与运维46文件与 I/O46表单与输入46MCP 协议45RAG45Vite 与模块构建45Webpack45内存与虚拟化45原生集成45多 Agent45工作负载与发布45应用与性能45数据处理45模块与工具链45组件与模板45缓存与数据结构45网络与运维45评估与调试45身份认证与授权45运行时与开发45Web 系统方案44一致性与容错44侦听与生命周期44分布式使用44原生组件与交互44可访问交互44消息与异步处理44渲染与调度44索引与执行计划44组件设计44缓存与代理44进程与并发44层叠与选择器43攻击面与防御43文档数据库43权限与安全43离线与渐进增强43语义与文档43请求与通信 API43Worker 与线程协作42事件系统42存储与离线数据42服务架构42服务端与流式渲染42服务端工程42泛型设计42版本控制42类型收窄42类型运算42组件与端到端42编码与执行42进程与线程42DOM 与文档操作41Flex 布局41HTTP 语义41NestJS 架构41REST 与接口契约41SQL 查询41加载与交互性能41动画与视觉41类型工程41记忆与状态41运行时与调度41Agent 架构40WebAssembly 集成40单元与集成测试40多 Agent 协作40工作流编排40模块与语言机制40浏览器与 UI 自动化40生产运行40函数与作用域39响应式设计39性能与并发39类型系统基础39Grid 布局38数组与集合38盒模型与排版38Hooks 与复用37应用开发37推理与成本37状态共享37知识库数据37模型与应用评测36对象与原型35状态与渲染35语言与并发35异步与 Promise34Effect32RAG 检索31React 性能31响应式与性能31微调与数据31TanStack Query30全栈边界30数据与缓存30大模型基础29路由与数据流29事件循环28流式交互28提示与上下文设计27数据与服务端27组件与依赖注入27组件与响应式27多模态应用24应用与渲染24Hydration22沙箱安全22状态管理18算法18CI/CD13语言与运行时10React Server Components6搜索与排序4实用函数实现3链表栈队列3图算法2字符串算法2树与遍历2索引与高级结构2Kubernetes1作用域与函数1动态规划1异步与浏览器1手写与交互性能1数组与双指针1相等比较1
当前页47 / 100

正在显示第 2301–2350 题

JavaScript47前端手写题3
第 47 页

本页面试问题

按稳定语义路径排序

  1. 2301
    JavaScript函数与作用域

    new.target 是什么?在箭头函数里读它会得到什么?

    new.target 用来判断函数是不是被 new 调用的:new 调用时它指向被 new 的那个构造函数,普通调用时是 undefined。继承时父类构造函数里读到的是子类。箭头函数没有自己的 new.target,读的是外层函数的。附抽象基类、强制 new 调用的写法。

    核心关键词new.target 含义与箭头函数
    #函数与作用域
  2. 2302
    JavaScript函数与作用域

    对象里写 fn() {} 和 fn: function () {} 有区别吗?

    对象方法简写 fn() {} 不只是少写一个 function。它和 fn: function () {} 的 this、arguments 规则完全一样,区别有两个:简写方法里能用 super 调原型上的方法,并且简写方法不能被 new。附对比代码和它与箭头函数属性的区别。

    核心关键词对象方法简写与普通函数属性区别
    #函数与作用域
  3. 2303
    JavaScript函数与作用域

    obj.fn?.() 怎么用?用可选链调用方法,this 会丢吗?

    obj.fn?.() 在 fn 是 null 或 undefined 时跳过调用、返回 undefined,存在时正常调用,this 仍然是 obj,不会丢。讲清 obj?.fn() 和 obj.fn?.() 保护的对象不同、短路时参数不会求值、属性存在但不是函数时照样报错,以及回调和事件处理里的常见用法。

    核心关键词可选链函数调用 this 绑定影响
    #函数与作用域
  4. 2304
    JavaScript函数与作用域

    怎么用闭包实现私有变量?有哪几种写法?

    把变量声明在函数里,只返回能读写它的方法,外面就只能通过这些方法操作它,这就是闭包实现的私有变量。讲清工厂函数和模块模式两种写法、每次调用为什么互不影响,并和下划线约定、class 的 #私有字段做对比。

    核心关键词闭包实现私有变量 模块模式
    #函数与作用域
  5. 2305
    JavaScript函数与作用域

    剩余参数 ...args 和 arguments 有什么区别?为什么推荐用前者?

    剩余参数 ...args 是真正的数组,能直接 map、reduce;arguments 是类数组,要先转换。剩余参数只收集具名参数后面的部分,箭头函数里也能用,arguments 在箭头函数里根本不存在。附对比代码、非严格模式下 arguments 和形参联动的坑,以及剩余参数的语法限制。

    核心关键词rest 剩余参数与 arguments 区别
    #函数与作用域
  6. 2306
    JavaScript函数与作用域

    什么是副作用?纯函数有什么特点,为什么要用它?

    纯函数有两个条件:同样的输入永远得到同样的输出,并且不改函数外面的任何东西。改参数、改全局变量、发请求、打日志、读当前时间都算副作用。附购物车的对比代码、为什么 React 和 Redux 要求纯函数,以及怎样把副作用隔离到边上。

    核心关键词纯函数与副作用 特点
    #函数与作用域
  7. 2307
    JavaScript函数与作用域

    函数默认参数里写 x = x,为什么会报错?

    函数默认参数有自己独立的作用域,参数名会遮蔽外层同名变量。写 x = x 时读的不是外面的 x 而是还没初始化的形参 x,直接触发 TDZ 报错。附参数求值顺序、前后参数依赖和常见踩坑场景。

    核心关键词函数默认参数与暂时性死区
    #函数与作用域
  8. 2308
    JavaScript函数与作用域

    JavaScript 中 this 的绑定规则有哪些?优先级如何?

    普通函数的 this 由调用方式决定,四种规则按优先级排:new 绑定最高,bind/call/apply 显式绑定其次,obj.fn() 隐式绑定再次,最后是默认绑定。附代码验证、strict 模式差异和常见追问。

    核心关键词this 绑定规则与优先级
    #函数与作用域
  9. 2309
    JavaScript函数与作用域

    class 里的方法传出去当回调,this 为什么就丢了?

    class 方法放在原型上,不会自动绑定实例,单独传出去当回调时 this 是 undefined。讲清它和普通对象方法的差别、构造器 bind 与箭头字段两种修法的取舍,以及解绑事件、子类覆写时的坑。

    核心关键词class 方法 this 绑定与 bind
    #函数与作用域
  10. 2310
    JavaScript函数与作用域

    addEventListener 的回调里,this 指向谁?

    addEventListener 用普通函数注册时,this 指向挂监听器的那个元素,也就是 event.currentTarget;箭头函数没有自己的 this,拿的是外层的。附事件委托里 target 和 currentTarget 的区别、handleEvent 对象写法和解绑的坑。

    核心关键词事件处理函数 this 指向 addEventListener
    #函数与作用域
  11. 2311
    JavaScript函数与作用域

    var、let、const 的作用域有什么不同?

    var 只认函数边界,if 和 for 的花括号关不住它;let 和 const 只在所在的块里有效,声明前访问会报错。讲清函数作用域、块级作用域、变量提升和暂时性死区,以及 const 为什么挡不住对象被修改。

    核心关键词var let const 作用域与提升区别
    #函数与作用域
  12. 2312
    JavaScript函数与作用域

    生成器里的 yield* 是干什么的?和 yield 有什么区别?

    yield* 把另一个可迭代对象的值一个个转交出去,相当于在生成器里嵌入另一段迭代。讲清它和 yield 的区别、被委托生成器的 return 值去了哪里,以及用 yield* 递归遍历树的写法和 next、throw 的转发规则。

    核心关键词yield* 委托可迭代对象
    #函数与作用域
  13. 2313
    前端手写题实用函数实现

    怎么用递归手写一个数组扁平化函数?

    手写递归版数组扁平化,把任意深度的嵌套数组拍成一维。讲清 Array.isArray 判断和递归拼接的写法,再补上和原生 flat 对齐的 depth 参数、稀疏数组的差异,以及嵌套太深爆栈时怎么改成显式栈。

    核心关键词数组扁平化 手写 flat
    #实用函数实现#测试
  14. 2314
    前端手写题实用函数实现

    手写深拷贝时,怎么用 WeakMap 解决循环引用?

    手写深拷贝遇到循环引用会无限递归直到爆栈。讲清用 WeakMap 记录原对象和副本的写法,为什么必须先存表再递归,拷贝后如何保持原来的引用关系,以及 WeakMap 和 Map 在这里到底差在哪。

    核心关键词深拷贝 循环引用 WeakMap
    #实用函数实现
  15. 2315
    前端手写题实用函数实现

    怎么手写一个递归深拷贝,处理好对象和数组?

    手写基础版深拷贝,递归复制普通对象和数组。讲清为什么要先排除 null、怎么区分数组和对象、for...in 为什么要配 hasOwnProperty,再用代码演示基础版遇到 Date、Set、Symbol 键时会出什么问题,以及和 JSON 方案、structuredClone 的对比。

    核心关键词JavaScript 深拷贝 手写
    #实用函数实现#测试#容器化
  16. 2316
    JavaScript模块与语言机制

    模块里写了顶层 await,为什么导入它的父模块要一直等?能避免吗?

    顶层 await 为什么会卡住导入它的父模块?因为 ESM 要保证父模块执行时依赖已经执行完,异步依赖没结束,父模块就不能跑。讲清阻塞的范围只限依赖链上的祖先模块,以及改成导出 Promise、动态 import() 两种规避方式。

    核心关键词顶层 await 阻塞父模块与规避
    #模块与语言机制#异步编程
  17. 2317
    JavaScript模块与语言机制

    ESM 遇到循环依赖是怎么处理的?和 CommonJS 拿到半成品对象有什么不同?

    ESM 循环依赖为什么不会像 CommonJS 那样拿到 undefined?因为 ESM 先把导入导出连成实时绑定再执行,读到的永远是对方变量本身。讲清两者加载流程的差别,以及 ESM 在循环里读到未初始化变量时会抛 ReferenceError 的坑。

    核心关键词ESM 循环依赖处理机制
    #模块与语言机制
  18. 2318
    JavaScript模块与语言机制

    循环依赖里,对方导出的是函数声明,我能在顶层直接调用吗?

    ESM 循环依赖中,另一方还没执行完,导出的函数声明能不能直接调用?能,因为函数声明在模块实例化时就创建好了。但换成箭头函数、函数表达式或 class 就会抛 ReferenceError,函数体里用到对方未初始化的变量也会报错。

    核心关键词ESM 循环依赖中函数声明能否安全调用
    #模块与语言机制
  19. 2319
    JavaScript模块与语言机制

    循环依赖里,一个模块在顶层读另一方导出的 let 变量,会发生什么?

    ESM 循环依赖中,在顶层读取对方还没初始化的 let 导出,会抛 ReferenceError: Cannot access before initialization。讲清暂时性死区为什么延伸到导入方,和 var、函数声明的差别,以及把读取挪进函数、拆出第三个模块的修法。

    核心关键词ESM 循环依赖 let 暂时性死区
    #模块与语言机制#异步编程
  20. 2320
    JavaScript模块与语言机制

    为什么 script type=module 加载跨域脚本必须过 CORS,普通 script 却不用?

    浏览器加载 ES 模块为什么要走 CORS?普通 script 标签跨域随便引,type=module 却会被拦。讲清模块请求默认用 cors 模式、同源模块为什么不受影响、本地双击 HTML 打不开模块的原因,以及 CDN 跨域模块要配哪些响应头。

    核心关键词浏览器 ESM 为什么要求 CORS
    #模块与语言机制
  21. 2321
    JavaScript模块与语言机制

    一个模块里导出两个同名的变量会怎样?和默认导出能重名吗?

    ESM 同一个模块导出两个同名的名字,会在解析阶段直接报 SyntaxError,模块一行代码都不会执行。讲清报错的几种写法、同一个变量用不同名字导出为什么没问题、默认导出和具名导出的关系,以及 export * 名字冲突时静默丢弃的坑。

    核心关键词ESM 重复导出同名变量报错
    #模块与语言机制
  22. 2322
    JavaScript模块与语言机制

    动态 import() 返回的是什么?为什么它是异步的?

    动态 import() 返回一个 Promise,resolve 后得到模块命名空间对象。它必须异步因为模块可能需要网络加载和执行。附 await 写法、错误处理、缓存机制和与静态 import 的本质区别。

    核心关键词动态 import() 返回 Promise 原因
    #模块与语言机制#异步编程
  23. 2323
    JavaScript模块与语言机制

    动态 import() 里能用变量或模板字符串当路径吗?

    语言规范允许 import() 接受任意表达式作为路径,但打包工具做静态分析时对动态路径有限制。附 Webpack 部分动态路径的写法、魔法注释的用法和常见踩坑场景。

    核心关键词动态 import 变量路径 模板字符串
    #模块与语言机制
  24. 2324
    JavaScript模块与语言机制

    什么时候该用动态 import() 而不是静态 import?

    静态 import 在编译期确定依赖,支持 tree-shaking;动态 import() 在运行时按需加载。附路由懒加载、条件加载、重型库延迟加载等典型场景和选用原则。

    核心关键词动态 import 与静态 import 使用场景
    #模块与语言机制
  25. 2325
    JavaScript模块与语言机制

    浏览器里用 script type="module" 加载模块要注意什么?

    浏览器通过 script type="module" 加载 ES 模块,默认 defer 执行,自动严格模式,跨域需要 CORS。附模块脚本和普通脚本的行为差异、nomodule 降级、常见踩坑场景。

    核心关键词浏览器 script module 入口加载
    #模块与语言机制#异步编程
  26. 2326
    JavaScript模块与语言机制

    具名导出和默认导出有什么区别?什么时候该用哪种?

    具名导出用大括号按名字导入,可以有多个;默认导出每个模块只能一个,导入时可以自由命名。附两种导出的语法差异、tree-shaking 影响、团队协作中的选用原则。

    核心关键词ESM named export vs default export
    #模块与语言机制
  27. 2327
    JavaScript模块与语言机制

    为什么 ESM 导出的变量是实时绑定,CommonJS 不是?

    ESM 的 import 是对源模块导出变量的实时引用,源端改了值导入方立刻看到。CommonJS 的 require 拿到的是 module.exports 的值拷贝,基本类型修改后导入方看不到变化。附代码对比和常见误区。

    核心关键词ESM 实时绑定与 CommonJS 区别
    #模块与语言机制
  28. 2328
    JavaScript模块与语言机制

    用 const 和 let 导出的变量,在实时绑定上有什么区别?

    用 const 导出的变量不能重新赋值,值永远是初始值(对象属性例外)。用 let 导出的可以在源模块里修改,导入方通过实时绑定读到新值。附代码对比和常见踩坑点。

    核心关键词ESM export const 与 let 实时绑定区别
    #模块与语言机制
  29. 2329
    JavaScript模块与语言机制

    export default 后面跟表达式和跟声明,有什么区别?

    export default 后面跟表达式时立刻求值,导出的是那一刻的值,没有实时绑定。跟函数或类声明时,声明会被提升,且保留模块内的本地绑定。附两种写法的实际差异和常见踩坑场景。

    核心关键词export default 表达式与声明区别
    #模块与语言机制
  30. 2330
    JavaScript模块与语言机制

    给 import 进来的变量重新赋值会怎样?

    ESM 里导入的绑定是只读的,重新赋值会报 TypeError。这是因为 import 建立的是指向源模块变量的只读引用,只有源模块能修改。对象属性修改不受限制。附代码示例和常见误区。

    核心关键词ESM 导入绑定只读 重新赋值报错
    #模块与语言机制
  31. 2331
    JavaScript模块与语言机制

    export { a } 和 export const a 同时写会怎样?怎么避免命名冲突?

    export 列表和声明导出的导出名不能重复,否则报 SyntaxError。两种写法都是创建具名导出,区别在于声明导出同时声明变量,列表导出引用已有变量。附用 as 重命名和 index.js 汇总导出的写法。

    核心关键词export 列表与声明导出命名冲突
    #模块与语言机制
  32. 2332
    JavaScript模块与语言机制

    import * as ns 和具名导入在 tree-shaking 上有什么区别?

    具名导入只拉需要的导出,对 tree-shaking 最友好。命名空间导入理论上引入所有导出,但现代打包工具也能分析 ns.x 的用法做优化。附两种写法的实时绑定差异和实际打包效果对比。

    核心关键词import * as 与具名导入 tree-shaking 区别
    #模块与语言机制#构建工具
  33. 2333
    JavaScript模块与语言机制

    ESM 的 import 声明会被提升吗?对代码执行顺序有什么影响?

    ESM 的 import 声明会被提升到模块顶部,所有导入在任何代码执行之前就已经完成。这意味着 import 写在文件中间也能在前面使用导入的值。附模块执行顺序详解和与 require 的行为对比。

    核心关键词ESM import 声明提升与执行顺序
    #模块与语言机制
  34. 2334
    JavaScript模块与语言机制

    原生 ESM 怎么导入 JSON?导入语句后面的 with 属性起什么作用?

    原生 ESM 导入 JSON 时,导入属性 with { type: "json" } 会让宿主校验资源类型,避免把意外返回的脚本当作模块执行。JSON 模块只有默认导出;旧版 assert 语法、打包器变换后的写法和浏览器原生加载也需要分开看。

    核心关键词ESM 导入 JSON import 断言作用
    #模块与语言机制
  35. 2335
    JavaScript模块与语言机制

    import map 是干什么的?有了它浏览器怎么解析 import 'vue'?

    浏览器不能像 Node.js 那样从 node_modules 查找裸模块名;import map 把 import "vue" 之类的说明符映射到 URL。imports 负责全局映射,scopes 可按导入方地址覆盖规则,前缀映射还要求键和值的路径形式一致;映射必须先于使用它的模块脚本生效。

    核心关键词import map 模块说明符映射作用
    #模块与语言机制
  36. 2336
    JavaScript模块与语言机制

    import.meta.resolve 是干什么的?它和 import 有什么关系?

    import.meta.resolve 按模块解析规则把说明符变成 URL,过程不会加载或执行目标模块。它适合寻找 Worker、WASM 等资源地址;相对路径可与 new URL(path, import.meta.url) 比较,但包名和 import map 的解析不能简单用 URL 拼接代替。

    核心关键词import.meta.resolve
    #模块与语言机制
  37. 2337
    JavaScript模块与语言机制

    import.meta.url 在浏览器和 Node.js 里分别拿到的是什么?

    import.meta.url 指向当前模块自身的地址,浏览器里通常是 HTTP URL,Node.js 文件模块里是 file URL。用 new URL 相对它定位图片或 Worker 文件,比手拼路径可靠;内联模块和打包后的资源地址则要结合实际宿主与构建产物判断。

    核心关键词import.meta.url 浏览器与 Node.js 差异
    #模块与语言机制
  38. 2338
    JavaScript模块与语言机制

    好几个文件都 import 同一个模块,它的代码会执行几次?

    同一个解析后的模块地址被多处导入,宿主通常只实例化并执行一次,随后导入复用同一模块记录。查询参数、不同解析结果或不同运行环境会形成不同身份;单例状态能否共享,取决于这些导入最终是否指向同一模块。

    核心关键词ESM 模块只执行一次的原因
    #模块与语言机制#缓存
  39. 2339
    JavaScript模块与语言机制

    import * as ns 拿到的对象是冻结的吗?能改它的属性吗?

    import * as ns 得到的模块命名空间会反映导出方的实时值,却不能由导入方改写、添加或删除导出。它的属性描述符看起来可写,Object.isFrozen 也可能返回 false;这与实际赋值失败并不矛盾,导出对象自身的内部属性仍可变。

    核心关键词模块 namespace 对象是否冻结
    #模块与语言机制
  40. 2340
    JavaScript模块与语言机制

    import { a as b } 重命名以后,还能读到原模块的最新值吗?

    import { count as total } 只更改导入方使用的名字,不会把值复制成快照。导出方更新 count 后,total 的后续读取仍能看到新值,但导入方不能给 total 赋值;默认导出重命名与解构赋值则分别遵循不同规则。

    核心关键词ESM import 重命名导入 实时绑定
    #模块与语言机制
  41. 2341
    JavaScript模块与语言机制

    导出方改了导出对象的属性,导入方能看到吗?

    导出对象后修改其属性或数组元素,导入方能通过共享引用看到变化;导出方重新给绑定赋值时,ESM 的导入方也会读到新绑定。把对象解构成普通局部变量会形成另一个结果,CommonJS 导出对象的替换行为也不能直接套用 ESM 规则。

    核心关键词ESM 导入对象属性修改是否可见
    #模块与语言机制
  42. 2342
    JavaScript模块与语言机制

    为什么 Node.js 能 import 'lodash',浏览器里这么写就报错?怎么解决?

    import "lodash" 这样的裸模块名在 Node.js 中按包解析规则定位,浏览器原生模块却只认识可解析的 URL。打包器能在构建时改写导入,import map 可在浏览器中映射名称,CDN 还可能提供可直接导入的 URL;三种做法的运行条件不同。

    核心关键词浏览器不支持裸模块说明符的适配
    #模块与语言机制#构建工具
  43. 2343
    JavaScript模块与语言机制

    Node.js 怎么判断一个 .js 文件是 CommonJS 还是 ESM?type 字段管什么?

    Node.js 中 .mjs 固定按 ESM 处理,.cjs 固定按 CommonJS 处理;.js 要结合最近的 package.json 中 type 字段和具体解析条件。没有明确标记的文件还可能触发语法检测;发布库时应明确文件格式与导出入口,避免两种模块系统相互引用时出错。

    核心关键词Node.js 区分 ESM 与 CommonJS type 字段
    #模块与语言机制
  44. 2344
    JavaScript模块与语言机制

    package.json 的 exports 字段怎么控制包的入口?条件导出按什么顺序匹配?

    包的 exports 字段决定外部可导入的入口,未声明的深层路径即使文件存在也可能被拒绝。子路径、通配符以及 import、require 条件按匹配规则选择目标;条件对象的先后顺序会影响结果,types 和 default 的位置也应与工具链预期一致。

    核心关键词package.json exports 条件导出解析
    #模块与语言机制
  45. 2345
    JavaScript模块与语言机制

    用 type="module" 加 nomodule 给老浏览器降级,要注意哪些坑?

    module 与 nomodule 可让支持 ESM 的浏览器加载现代脚本,让旧浏览器回退到转译脚本。两类脚本的执行时机和兼容性并不完全对称;某些旧版浏览器会重复下载或执行,支持模块也不代表支持现代代码用到的每一项语法。

    核心关键词script nomodule 降级方案注意点
    #模块与语言机制#构建工具
  46. 2346
    JavaScript模块与语言机制

    只写 import './polyfill.js' 不接收任何导出,有什么用?会执行吗?

    import "./module" 不绑定任何导出,但仍会按模块依赖顺序执行目标模块的顶层代码,常用于加载 polyfill、样式或插件注册逻辑。同一模块通常只执行一次;打包时如果把 package.json 的 sideEffects 声明错了,这类导入可能被优化掉。

    核心关键词ESM 副作用导入 import 模块
    #模块与语言机制
  47. 2347
    JavaScript模块与语言机制

    export ... from 再导出有哪几种写法?默认导出能被 export * 带出去吗?

    桶文件可以用 export ... from 转交其他模块的导出,而不先在本地导入。具名再导出、export * 和默认导出的行为各不相同:星号不会转交 default,两个星号来源撞名也不会自动任选其一,调用方必须明确解决歧义。

    核心关键词ESM export from 再导出用法
    #模块与语言机制
  48. 2348
    JavaScript模块与语言机制

    <script type="module"> 和普通 script 标签有哪些区别?

    模块脚本默认延迟执行并启用严格模式,顶层变量不会挂到 window,跨域加载还要满足 CORS;普通脚本没有这些默认行为。把旧页面改为 type="module" 时,顶层 this、同地址脚本重复引用及本地 file URL 的加载限制都可能改变运行结果。

    核心关键词script type=module 与普通脚本区别
    #模块与语言机制
  49. 2349
    JavaScript模块与语言机制

    import source 是什么?它和普通 import 有什么不一样?

    普通 import 完成模块加载与求值后取得导出;import source 取得的是可交给宿主后续实例化的源码阶段对象,例如 WebAssembly 模块。它与延迟求值的 import defer 关注不同阶段,具体能在哪些环境使用还取决于宿主实现和当前支持情况。

    核心关键词source phase imports 模块导入阶段
    #模块与语言机制
  50. 2350
    JavaScript模块与语言机制

    ES 模块为什么默认就是严格模式?对模块里的函数有什么影响?

    ES 模块天然采用严格模式,不需要也不能通过省略 use strict 来关闭。普通函数直接调用时 this 保留 undefined,给未声明变量赋值会报错,arguments 不再与形参联动,with 也不可用;旧脚本迁移为模块时这些差异会直接暴露。

    核心关键词ESM 默认严格模式原因与影响
    #模块与语言机制
上一页
1…4546474849…100
下一页
前端进阶之旅本地 Markdown 维护 · 服务端分页 · 完整内容对用户与搜索引擎一致