可选链(?.) 如何用于函数调用?它对 this 绑定有何影响?
围绕“可选链(?.) 如何用于函数调用?它对 this 绑定有何影响”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明如果调用不存在不会报错,且 this 绑定保持原引用。
JavaScript面试题第 4 页,显示第 151–200 题,共找到 285 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
围绕“可选链(?.) 如何用于函数调用?它对 this 绑定有何影响”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明如果调用不存在不会报错,且 this 绑定保持原引用。
围绕“如何利用闭包实现 JavaScript 的私有变量?有哪些模式”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需展示通过在函数内定义变量并返回暴露接口的方式。
对比剩余参数与 arguments 的核心差异:真数组 Vs 类数组、收集范围、同步机制、默认参数关系,并指出工程中的选择依据。
围绕“函数调用中副作用指什么?纯函数有什么特点”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需明确副作用定义与纯函数可预测性。
围绕“函数默认参数与块级作用域中的暂时性死区有什么关系”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明默认参数有自己的作用域,未初始化前访问外层同名变量可能导致 TDZ 错误。
本文解析 this 四种绑定规则及优先级,强调调用点决定 this,不扩展到箭头函数。内容含作用域机制、典型场景、边界条件,并提供判断方法。
围绕“在 class 中的方法 this 绑定与普通对象方法有何不同?为何通常要 bind”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明类方法默认不绑定,析构时 this 丢失,以及通过构造函数绑定或箭头字段初始化。
解释 addEventListener 回调中 this 的指向规则:普通函数 this 为 currentTarget 元素,箭头函数继承外层 this,并提供判断方法和适用场景。
围绕“var、let 和 const 在函数作用域与块级作用域上有何不同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需比较函数作用域与块级作用域、变量提升与暂时性死区,直接与词法绑定相关。
围绕“yield* 表达式用于什么?如何在生成器中委托给另一个可迭代对象”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明委托迭代,最终值由 return 传递。
围绕“为什么 top-level await 会阻塞其父模块的解析?是否有方式避免”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确“避免方式”为改用动态加载或重新设计模块依赖。
围绕“ESM 中循环依赖的处理机制是怎样的?为什么不会像 CommonJS 那样出现部分 undefined”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释基于实时绑定和模块实例化的调度,与 CommonJS 的执行时赋值的对比。
围绕“在循环依赖的模块中,如果一方导出的是函数声明,另一方导入后能否安全调用”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明实时绑定下,函数提升使得模块链接时找不到但执行时可用的机制。
围绕“循环依赖中如果一方导出 let 绑定,另一模块在初始化顶层读取它,会发生什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 let 的暂时性死区可能引起 ReferenceError,与 var 或函数的差异;不涵盖异步模块。
围绕“为什么浏览器中的 ESM 必须使用 CORS 获取模块?同源策略如何适用”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明模块脚本受 CORS 限制,普通脚本不受。
围绕“同一模块中能否导出两个同名的变量或函数?如果尝试会怎样”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明语法错误的发生,与默认导出可混用的情况。
围绕“动态 import() 返回什么?为什么它是异步的”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 import() 的 Promise 语义和异步加载缘由,区别于静态导入的静态分析。
围绕“动态 import() 是否允许使用模板字符串或变量作为参数?它如何处理变量路径”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明规范允许任意表达式,但实际路径解析可能受限。
围绕“什么时候使用动态 import() 而不是静态 import?请给出具体场景”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖重点给出按需加载、条件加载、非模块脚本等场景。
围绕“在浏览器中,如何使用 <script type="module"> 指定入口来加载模块图?有哪些注意点”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕涉及 async/defer、CORS、MIME 等,不包含模块预加载。
阐述两种导出的语法、导入名称和数量差异,并通过校验工具接口案例说明默认导出的适用条件,最后指出默认导出声明方式及混合导出时的常见误解与重命名成本。
本题解释 ESM 导出变量为实时绑定、CommonJS 导出为值拷贝或对象引用的机制差异,通过代码示例说明实时绑定如何让导入值随源模块变化,并指出在哪些边界下即使 ESM 也可能呈现非实时行为(导出对象的属性修改)。
本题辨析 const 和 let 导出的区别,明确实时绑定对两者等价,差异在导出模块内部的可赋值性,并给出导入端只读的边界。说明对象属性修改仍可见,数字等原始值则必须依赖 let 重绑定。
围绕“export default 一个表达式(如立即执行函数)与先声明再导出在提升和实时绑定上有什么差异”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明默认导出不绑定名称,与具名导出的提升特性不同。
围绕“在 ESM 的导入模块中,给导入的变量重新赋值会出现什么错误?为什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖重点说明导入绑定是只读的,且赋值会导致 TypeError。
围绕“export { a, b } 与 export const a = ... 同时出现时,如何避免命名冲突”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释导出列表是引用局部绑定,因此不能重复。
解释import * as ns与具名导入在实时绑定和Tree-shaking上的差异:虽都实时绑定,但namespace对象阻碍静态分析,实际打包中具名导入更利于按需删除无用导出。
本文解析 ESM 中 import 声明是否被提升,解释模块链接阶段先于执行导致绑定提前创建。跟 var 提升区分,明确绑定创建与值初始化的差异,并给出代码放置顺序和实时绑定的实际影响。
围绕“如何在 ESM 中导入 JSON 文件?导入断言属性起什么作用”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖重点说明 import 断言语法和用途。
围绕“<script type="importmap"> 的作用是什么?它如何改变模块说明符的解析”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕Explain mapping bare specifiers to URLs; 不涉及动态 import 的解析。
围绕“import.meta.resolve 的作用是什么?它和 import 语句有什么关系”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释其作为解析路径的用途,与动态 import 不同;不探讨浏览器兼容性细节。
围绕“import.meta.url 在不同环境(浏览器 vs Node.js)下提供什么信息”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 import.meta 对象及 url 的用途。
围绕“如果多个模块导入同一个模块,该模块会执行几次?为什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释模块缓存的实例化与求值一次,不针对条件加载的 import() 可能重复执行。
围绕“模块 namespace 对象是冻结的吗?可以修改其属性吗”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 namespace 对象是密封且属性只读,但导出对象的内容可变。
讲解 ESM 中 import { x as y } 重命名导入的语法细节,说明别名与原名共享同一条只读实时绑定,导出方重新赋值后导入方可读到新值,并给出实际场景与失效边界。
围绕“导入一个对象或数组时,导出方修改该对象的属性,导入方是否能看到?为什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖区分对象内部可变性与绑定本身,说明是共享引用。
围绕“为什么浏览器不支持裸模块说明符,而 Node.js 支持?如何适配”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答可用 import maps 或打包器;不深入 Each map 入口细节。
围绕“Node.js 中如何区分一个 .js 文件是 CommonJS 还是 ESM?package.json 的 typ”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕涉及 type 字段与文件扩展名 .mjs/.cjs。
围绕“Node.js 中 package.json 的 exports 字段如何控制模块的解析?它如何支持条件导出”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕Focus on condition order and subpaths; 不扩展到各条件的完整写法。
围绕“使用 <script nomodule> 构建使用旧脚本的降级环境时,需要注意什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明只针对不支持 module 的浏览器执行。
本题解释纯副作用导入 import './module' 的语义:它触发模块代码执行但无导入绑定,常用于 polyfill、全局配置等场景,并讨论其与动态导入和重复导入的关系。
围绕“在 ESM 中,如何使用 export ... from 进行再导出,以及是否存在具名与默认再导出的区别”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 export { x } from 与 export * from 的用法和差异。
围绕“浏览器中 <script type="module"> 与普通脚本的主要差异有哪些”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕强调作用域、延迟加载、严格模式、CORS 等。
围绕“什么是 import source 阶段?source-phase imports 与普通 import 有何不同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖面向较新的 ESM 特性,说明 import source 与 import defer 的基本意;不深入提案历史。
围绕“为什么 ES6 模块的代码默认是严格模式?这对模块内函数有什么影响”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明模块顶层与模块内函数自动严格模式,并列举常见差异。
围绕“哪些静默错误在严格模式下会变成抛出异常?请给出一个例子”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖列举如给只读属性赋值、删除不可删除属性、参数重名等典型。
围绕“在严格模式下,普通函数中的 this 默认是 undefined,为什么这有助于避免错误”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明不会默认绑定全局,可减少意外 mutation。
围绕“在严格模式下,模块顶层 this 的值是什么?为什么它与传统脚本的全局 this 不同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖重点说明模块顶层 this 为 undefined。
围绕“为什么 import 声明只能出现在模块顶层?如果放在代码块中会怎样”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明静态语法的强制要求,不能条件导入,除非使用动态 import()。
围绕“在模块顶层使用 await 会如何影响模块的执行和依赖加载”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 await 使模块异步化,阻塞兄弟模块解析,不是 ES2017 的普通运算符。