前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
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 热点
旧版
首页程序员面试题库JavaScript · 模块与语言机制面试题
面试知识索引 · 分类、标签与搜索

JavaScript · 模块与语言机制面试题,40 道完整答案

JavaScript · 模块与语言机制面试题第 1 页,显示第 1–40 题,共找到 40 道完整解析,可继续按分类、标签与关键词缩小范围。

40筛选结果
52技术分类
178检索标签
1索引分页
按分类建立知识面,再用标签和搜索定位问题

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

快速定位

分类、标签与关键词搜索

清除全部筛选
题库检索
技术分类52 个
全部分类5000JavaScript285AI Agent511浏览器301React281AI 开发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
JavaScript 标签22 个
全部标签模块与语言机制40值与类型50异步编程48数据处理45函数与作用域39数组与集合38对象与原型35异步与 Promise34性能优化7并发编程5构建工具5流处理4缓存4表单2事件循环1
查看其余 7 个标签
作用域与函数1容器化1异步与浏览器1手写与交互性能1测试1相等比较1算法1
当前页01 / 1

正在显示第 1–40 题

JavaScript40
第 1 页

本页面试问题

按稳定语义路径排序

  1. 0001
    JavaScript模块与语言机制

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    核心关键词ESM 默认严格模式原因与影响
    #模块与语言机制
  36. 0036
    JavaScript模块与语言机制

    哪些操作在非严格模式下悄悄失败,严格模式下却会报错?

    严格模式会把部分静默失败变成异常,例如给只读属性赋值、删除不可配置属性或给未声明变量赋值。重名参数等写法甚至在解析阶段就失败;迁移旧脚本时需要区分语法错误与运行时错误,不能只看最终值是否改变。

    核心关键词严格模式静默错误转异常示例
    #模块与语言机制
  37. 0037
    JavaScript模块与语言机制

    严格模式下普通函数里的 this 为什么是 undefined?

    普通函数直接调用时,非严格模式可能把 this 替换为全局对象,严格模式则保留 undefined。作为对象方法调用、显式绑定或构造调用时,结果另有规则;模块天然处于严格模式,迁移旧代码后依赖全局 this 的逻辑容易暴露问题。

    核心关键词严格模式函数内 this 为 undefined
    #模块与语言机制
  38. 0038
    JavaScript模块与语言机制

    ES 模块顶层的 this 是什么?为什么和普通脚本不一样?

    ES 模块顶层的 this 是 undefined,普通经典脚本顶层则通常是全局对象。旧库若用顶层 this 挂载全局变量,改为模块后这段逻辑会失效;跨浏览器和 Node.js 使用时应明确选择 globalThis 或显式导出。

    核心关键词ESM 顶层 this 为 undefined
    #模块与语言机制
  39. 0039
    JavaScript模块与语言机制

    为什么 import 声明只能写在模块顶层?

    静态 import 只能放在模块顶层,写进 if、函数或循环会在解析阶段失败,因为依赖关系需要提前确定。按条件加载资源时应使用动态 import();它在运行时发起加载并返回 Promise,错误处理和执行时机也与静态导入不同。

    核心关键词import 为什么只能在模块顶层
    #模块与语言机制
  40. 0040
    JavaScript模块与语言机制

    顶层 await 会让依赖这个模块的代码等多久?

    模块顶层 await 会暂停本模块后续求值,并让依赖它的模块等待结果;依赖图中无关的分支仍可继续执行。配置加载等初始化场景适合它,但等待链过长会延迟应用启动,拒绝结果也会沿依赖关系传播。

    核心关键词顶层 await 对模块执行的影响
    #模块与语言机制#异步编程
上一页
1
下一页
前端进阶之旅本地 Markdown 维护 · 服务端分页 · 完整内容对用户与搜索引擎一致