前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
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面试题第 3 页
面试知识索引 · 分类、标签与搜索

JavaScript面试题,285 道完整答案

JavaScript面试题第 3 页,显示第 101–150 题,共找到 285 道完整解析,可继续按分类、标签与关键词缩小范围。

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

每页只渲染 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 个
值与类型50异步编程48数据处理45模块与语言机制40函数与作用域39数组与集合38对象与原型35异步与 Promise34性能优化7并发编程5构建工具5流处理4缓存4表单2事件循环1
查看其余 7 个标签
作用域与函数1容器化1异步与浏览器1手写与交互性能1测试1相等比较1算法1
当前页03 / 6

正在显示第 101–150 题

JavaScript50
第 3 页

本页面试问题

按稳定语义路径排序

  1. 0101
    JavaScript数据处理

    JSON.stringify 遇到 NaN 和 Infinity 会怎样?为什么不报错?

    NaN、Infinity 和 -Infinity 都不是合法的 JSON 数字,JSON.stringify 会把它们统一写成 null,而且不报错。讲清为什么这样设计、往返之后为什么恢复不了、提交前怎么用 Number.isFinite 拦住,以及确实需要保留时怎么用 replacer 和 reviver 编码。

    核心关键词JSON.stringify NaN Infinity 序列化为null
    #数据处理
  2. 0102
    JavaScript数据处理

    接口返回的日期是字符串,怎么用 JSON.parse 的 reviver 转回 Date?

    Date 经过 JSON 往返会变成字符串,JSON.parse 不会自动转回来。讲清 reviver 怎么按字段把日期字符串恢复成 Date、它从里到外的调用顺序、返回 undefined 会删属性,以及为什么不能见到像日期的字符串就转,还有 2 月 30 日这种会被引擎悄悄挪走的日期。

    核心关键词JSON.parse reviver 解析日期字符串
    #数据处理
  3. 0103
    JavaScript数据处理

    JSON.stringify 的第二个参数有什么用?怎么用它过滤和转换属性?

    JSON.stringify 的第二个参数 replacer 可以是函数或属性名数组。函数能逐个转换或过滤值,数组是属性白名单,而且对嵌套对象同样生效。讲清两种形式的区别、根节点空 key、调用顺序、数组元素返回 undefined 会变成 null,以及 toJSON 和 replacer 的先后。

    核心关键词JSON.stringify replacer 参数过滤属性
    #数据处理
  4. 0104
    JavaScript数据处理

    对象里有 undefined、函数和 Symbol,JSON.stringify 之后它们去哪了?

    undefined、函数和 Symbol 在 JSON 里都没有对应的类型:在对象里整个属性被删掉,在数组里变成 null,单独序列化直接返回 undefined。讲清三种位置为什么处理不同、PATCH 接口里「不传」和「传 null」的区别,以及 Symbol 键、稀疏数组这些细节。

    核心关键词JSON.stringify 处理undefined 函数 Symbol
    #数据处理
  5. 0105
    JavaScript数据处理

    正则的 s 标志是干什么的?和 m 标志有什么区别?

    s 标志让点号能匹配换行符,m 标志让 ^ 和 $ 能匹配每一行的开头和结尾,一个管点号、一个管锚点,互不影响。附日志多行提取、逐行匹配的例子,以及不开 s 时常见的 [\s\S] 写法。

    核心关键词JavaScript 正则 s标志dotAll与m标志区别
    #数据处理
  6. 0106
    JavaScript数据处理

    带 g 的正则连续调用 test,为什么结果一会儿 true 一会儿 false?

    带 g 或 y 标志的正则会用 lastIndex 记住上次匹配到哪里,复用同一个实例做校验就会出现 true、false 交替。讲清 lastIndex 的更新规则、三种修法、exec 循环里什么时候该重置,以及空匹配导致死循环的处理。

    核心关键词正则 lastIndex 手动重置 g与y标志
    #数据处理#测试
  7. 0107
    JavaScript数据处理

    正则里的前瞻和后顾断言怎么用,有什么区别?

    用千分位格式化、提取金额两个例子讲清 JavaScript 正则四种环视断言:前瞻看右边、后顾看左边,都只检查不吃字符。附密码规则多条件校验、断言写反位置的常见错误,以及老环境不支持后顾时的降级写法。

    核心关键词JavaScript 正则 前瞻与后顾断言用法
    #数据处理
  8. 0108
    JavaScript数据处理

    有了 matchAll,为什么不再推荐用 while 循环调 exec?

    对比 exec 循环和 matchAll 拿全部匹配的两种写法:matchAll 返回带捕获组、命名组和 index 的迭代器,不用手动维护 lastIndex,也不改动原正则。附不带 g 报 TypeError、迭代器只能用一次等常见坑。

    核心关键词matchAll 与 exec 循环匹配的区别
    #数据处理
  9. 0109
    JavaScript数据处理

    正则的命名捕获组怎么用,和 match[1] 这种写法比好在哪?

    用解析日期的例子讲清 JavaScript 正则命名捕获组:怎么写、怎么通过 groups 读取、在 replace 字符串和回调里怎么引用、正则内部怎么反向引用。对比数字下标,说明它为什么在正则改动时更不容易取错,以及可选分支没命中时的 undefined 问题。

    核心关键词JavaScript 正则 命名捕获组 用法
    #数据处理
  10. 0110
    JavaScript数据处理

    正则的贪婪匹配和非贪婪匹配有什么区别?

    用匹配引号内容和 HTML 标签的例子,讲清 JavaScript 正则量词默认贪婪、加问号变懒惰的区别,以及背后的回溯过程。说明懒惰不等于最短匹配、为什么排除型字符类往往是更好的写法,并附灾难性回溯的常见追问。

    核心关键词JavaScript 正则 贪婪与懒惰量词区别
    #数据处理
  11. 0111
    JavaScript数据处理

    正则的 y 标志和 g 标志有什么区别,y 适合用在哪?

    g 从 lastIndex 开始往后找,y 必须恰好在 lastIndex 处匹配、不许跳过字符。用对比代码和一个真实的四则运算词法分析器讲清 sticky 标志的用途,以及它和 ^ 锚点、gy 组合在 match 和 replace 里的表现。

    核心关键词JavaScript 正则 sticky标志y与global标志g区别
    #数据处理
  12. 0112
    JavaScript数据处理

    正则里的 \p{Script=Han} 是什么,怎么用它匹配汉字?

    JavaScript 正则的 Unicode 属性转义怎么用?讲清 \p{Script=Han}、\p{Letter}、\p{Number} 分别匹配什么,为什么必须加 u 标志,和手写 [一-龥] 区间比强在哪,以及它处理不了 emoji 组合字符的边界。

    核心关键词JavaScript 正则 Unicode属性转义 \p{} 匹配
    #数据处理
  13. 0113
    JavaScript数据处理

    分块解码时,TextDecoder 为什么要传 stream: true?

    流式读取 fetch 响应时,一个汉字的 UTF-8 字节可能被拆到两个 chunk 里,直接解码就会出现乱码。讲清 TextDecoder 的 stream: true 如何缓存半个字符、为什么必须复用同一个实例、最后为什么还要调一次 decode(),以及 SSE 场景下还要处理的半行问题。

    核心关键词TextDecoder stream:true 分块解码多字节
    #数据处理#缓存#流处理
  14. 0114
    JavaScript数据处理

    字节不是合法 UTF-8 时,TextDecoder 会报错还是出乱码?

    TextDecoder 遇到非法 UTF-8 字节默认不报错,而是替换成 U+FFFD 继续解码;开启 fatal 后才会抛 TypeError。讲清两种模式各适合什么场景,ignoreBOM 为什么名字容易理解反,以及编码选错时 fatal 为什么救不了你。

    核心关键词TextDecoder 非法UTF-8 fatal 替换处理
    #数据处理#流处理
  15. 0115
    JavaScript数据处理

    TextEncoder 为什么只能输出 UTF-8,能指定成 GBK 吗?

    TextEncoder 把字符串转成 Uint8Array,输出永远是 UTF-8,构造函数不接受编码参数。讲清一个字符会变成几个字节、为什么不能用 length 算字节数、encode 和 encodeInto 的区别,以及和能解多种编码的 TextDecoder 为什么不对称。

    核心关键词TextEncoder 字符串转UTF-8 Uint8Array
    #数据处理
  16. 0116
    JavaScript数据处理

    Uint8Array 和普通数组有什么区别?

    Uint8Array 这类类型化数组本质是 ArrayBuffer 上的一个视图:长度固定、元素类型固定、内存连续,写入 300 会变成 44,也没有 push。讲清 ArrayBuffer 和视图的关系、多个视图共享内存时的字节序问题,以及什么场景该用类型化数组。

    核心关键词类型化数组与普通数组 内存表示差异
    #数据处理
  17. 0117
    JavaScript数据处理

    类型化数组的 subarray 和 slice 有什么区别?

    Uint8Array 的 subarray 和 slice 参数一样,结果却完全不同:subarray 返回共享内存的视图,改它会改到原数组;slice 复制出一份独立数据。讲清两者的代价、复用缓冲区时 subarray 带来的数据被覆盖问题,以及和普通数组 slice 的区别。

    核心关键词类型化数组 subarray 与 slice 区别
    #数据处理
  18. 0118
    JavaScript数据处理

    正则加不加 u 标志,匹配 emoji 时有什么区别?

    不加 u 时,正则把一个 emoji 看成两个 UTF-16 代码单元,点号、量词、字符类都会把它拆成两半。本文用可运行的例子讲清 u 标志改变了什么、它为什么让语法更严格,以及它管不到的组合 emoji。

    核心关键词JavaScript 正则 u标志 处理emoji代理对
    #数据处理
  19. 0119
    JavaScript数据处理

    两个看起来一样的 é,为什么用 === 比较是 false?

    é 在 Unicode 里有两种写法:一个预组字符,或者 e 加一个组合重音。它们显示完全一样,但 === 比较是 false。本文讲清 normalize 的四种形式 NFC、NFD、NFKC、NFKD 的区别,以及搜索、去重、做索引时该怎么用。

    核心关键词JavaScript String normalize NFC NFD 比较
    #数据处理
  20. 0120
    JavaScript数据处理

    split('').reverse().join('') 反转带 emoji 的字符串,为什么会乱码?

    经典的 split('').reverse().join('') 会把 emoji 拆成两个代理项再颠倒顺序,结果变成乱码。本文对比按代码单元、按码点、按字素簇三种反转方式,讲清 Array.from 为什么还不够,以及 Intl.Segmenter 怎么处理家庭 emoji、国旗和带重音的字母。

    核心关键词JavaScript 正确反转含emoji的字符串
    #数据处理
  21. 0121
    JavaScript数据处理

    为什么一个 emoji 的 length 是 2?怎么正确遍历字符串?

    JavaScript 字符串用 UTF-16 编码,编号超过 U+FFFF 的字符要拆成一对代理项存储,所以 emoji 的 length 是 2。本文讲清代理对怎么算出来、for 循环和 for...of 遍历的区别、charCodeAt 与 codePointAt 的用法,以及统计用户可见字数的正确做法。

    核心关键词JavaScript 字符串 代理对 emoji长度为2 遍历
    #数据处理
  22. 0122
    JavaScript函数与作用域

    严格模式下为什么不能用 arguments.callee?递归该怎么写?

    严格模式下访问 arguments.callee 会直接抛 TypeError。本文讲清它原本解决什么问题、为什么被禁用(妨碍引擎内联优化、暴露调用栈),以及用具名函数表达式实现递归的写法和它比外层变量递归更稳的原因。

    核心关键词arguments.callee 严格模式禁用 替代方案
    #函数与作用域#性能优化
  23. 0123
    JavaScript函数与作用域

    arguments 怎么转成真正的数组?几种写法有什么区别?

    arguments 有下标和 length,却没有 map、filter 这些数组方法。本文对比 Array.prototype.slice.call、Array.from、展开运算符三种转换写法的原理和差异,讲清类数组和可迭代对象的区别,以及为什么新代码直接用剩余参数。

    核心关键词arguments 转数组的方法对比
    #函数与作用域
  24. 0124
    JavaScript函数与作用域

    arguments 和函数的形参是一回事吗?改了一个另一个会变吗?

    arguments 记录的是这次调用实际传进来的所有值,形参是函数声明里起的局部变量名。讲清两者数量为什么会不一样、函数 length 和 arguments.length 的区别,以及只有非严格模式加简单参数时才会联动的历史规则。

    核心关键词arguments 与形参(parameters)的区别
    #函数与作用域
  25. 0125
    JavaScript函数与作用域

    箭头函数里读 arguments,读到的是谁的?

    箭头函数没有自己的 arguments,写在里面的 arguments 会按词法作用域找到外层普通函数的那一份。讲清为什么这样设计、防抖函数里怎么利用这一点、顶层读 arguments 会报什么错,以及拿箭头函数自己的参数为什么要用 rest。

    核心关键词箭头函数没有 arguments 获取外层 arguments
    #函数与作用域
  26. 0126
    JavaScript函数与作用域

    箭头函数的 this 指向谁?为什么 call 和 bind 改不了它?

    箭头函数没有自己的 this,里面的 this 就是定义它的外层函数的 this,和怎么调用无关,所以 call、apply、bind 都改不了。讲清对象字面量里写箭头方法为什么拿不到对象、类字段箭头函数的取舍,以及什么时候不该用箭头函数。

    核心关键词箭头函数 this 词法绑定原理
    #函数与作用域
  27. 0127
    JavaScript函数与作用域

    异步生成器和普通生成器有什么区别?什么时候会用到它?

    异步生成器用 async function* 声明,里面既能 await 又能 yield,next() 返回的是 Promise,要用 for await...of 来消费。结合分页拉取数据的例子讲清它和普通生成器的区别、break 时 finally 如何清理,以及它为什么不会自动并发。

    核心关键词异步生成器与普通生成器区别
    #函数与作用域#异步编程
  28. 0128
    JavaScript函数与作用域

    bind 和 call、apply 有什么区别?bind 返回的函数有什么特点?

    call 和 apply 是马上调用,只是传参方式不同;bind 不调用,而是返回一个 this 和前几个参数都固定好的新函数。讲清 bind 之后再 bind 或 call 为什么改不了 this、被 new 调用时 this 怎么变、length 怎么算,以及解绑事件时最常见的坑。

    核心关键词bind 与 call apply 区别
    #函数与作用域
  29. 0129
    JavaScript函数与作用域

    JavaScript 传参是按值传递还是按引用传递?传对象进去改了会怎样?

    JavaScript 所有参数都是按值传递,对象参数传的是「引用」这个值的副本。所以在函数里改对象属性会影响外面,给形参重新赋值却不会。用一个 swap 函数说明为什么这不是按引用传递,并讲清浅拷贝、不可变更新的常见坑。

    核心关键词JavaScript 参数按值传递还是按引用传递
    #函数与作用域
  30. 0130
    JavaScript函数与作用域

    把对象方法传给 setTimeout,为什么 this 就丢了?怎么解决?

    setTimeout(obj.method) 传出去的只是一个函数,obj 没有跟着过去,定时器之后单独调用它,this 就不再是 obj。讲清 this 由调用方式决定的原理、浏览器和 Node.js 里此时 this 分别是什么,以及 bind、箭头函数包一层、类字段箭头函数三种修法的取舍。

    核心关键词setTimeout 回调 this 丢失 解决方法
    #函数与作用域
  31. 0131
    JavaScript函数与作用域

    for 循环里用 var,setTimeout 为什么打印出来全是同一个数?

    经典面试题:for 循环里用 var 声明 i,setTimeout 打印出来全是 3。原因是 var 整个函数只有一个 i,回调执行时循环早就跑完了。附 let、IIFE、setTimeout 第三个参数三种修法和常见追问。

    核心关键词var 循环变量闭包异步回调 修复
    #函数与作用域#异步编程
  32. 0132
    JavaScript函数与作用域

    闭包为什么会导致内存泄漏?怎么避免?

    闭包本身不会泄漏,泄漏的是被长期持有的闭包。讲清垃圾回收的可达性原理、事件监听和定时器这两种最常见的泄漏场景、同一作用域闭包共享环境的坑,以及用 DevTools 定位泄漏的步骤。

    核心关键词闭包导致内存泄漏 如何避免
    #函数与作用域
  33. 0133
    JavaScript函数与作用域

    柯里化是怎么用闭包实现的?能手写一个 curry 吗?

    柯里化就是把 add(1, 2, 3) 变成 add(1)(2)(3)。讲清闭包怎样把已经传入的参数攒起来、参数够了再执行,手写一个支持分批传参的 curry,并说明 fn.length 的坑、和偏函数的区别以及实际用途。

    核心关键词柯里化 currying 闭包实现原理
    #函数与作用域
  34. 0134
    JavaScript函数与作用域

    函数默认参数是什么时候计算的?能用前面的参数当默认值吗?

    默认参数不是定义函数时算一次,而是每次调用、对应实参是 undefined 时才计算。讲清从左到右的初始化顺序、后面参数引用前面参数的写法、传 null 为什么不触发默认值,以及和 Python 默认参数的区别。

    核心关键词默认参数求值时机 能否引用前面参数
    #函数与作用域
  35. 0135
    JavaScript函数与作用域

    函数声明和函数表达式有什么区别?为什么一个能提前调用一个不能?

    函数声明整体提升,写在后面也能先调用;函数表达式只提升变量,var 写法提前调用报 TypeError,let 和 const 写法报 ReferenceError。附具名函数表达式的名字作用域、块级函数声明的坑和常见追问。

    核心关键词函数声明与函数表达式区别 提升
    #函数与作用域
  36. 0136
    JavaScript函数与作用域

    所有函数都有 prototype 吗?箭头函数为什么没有?

    不是所有函数都有 prototype。普通函数和 class 有,箭头函数、async 函数、对象简写方法、bind 返回的函数没有;生成器有 prototype 却不能 new。讲清 prototype 和能否 new 的关系以及常见误判。

    核心关键词函数 prototype 属性 箭头函数为何没有
    #函数与作用域#异步编程
  37. 0137
    JavaScript函数与作用域

    生成器函数是怎么工作的?yield 和 next 是什么关系?

    调用生成器函数不会执行函数体,只返回一个迭代器;每次调用 next 才运行到下一个 yield 并暂停。讲清 next 返回的 value 和 done、next 传参如何变成 yield 的结果、第一次 next 的参数为什么没用,以及实际用途。

    核心关键词generator 生成器原理 yield 与 next
    #函数与作用域
  38. 0138
    JavaScript函数与作用域

    生成器对象和数组这种可迭代对象有什么不一样?

    生成器对象既是迭代器又是可迭代对象,Symbol.iterator 返回它自己,所以只能遍历一次;数组每次遍历都会新建迭代器,可以反复遍历。讲清可迭代协议和迭代器协议的区别,以及怎样写一个能多次遍历的对象。

    核心关键词生成器对象与迭代器协议异同
    #函数与作用域
  39. 0139
    JavaScript函数与作用域

    生成器函数能用 new 调用吗?里面的 new.target 是什么?

    生成器函数不能 new,会直接抛 TypeError;因为只能普通调用,函数体里的 new.target 永远是 undefined。讲清它明明有 prototype 却不能构造的原因、生成器对象的原型关系,以及想要可 new 又可遍历时该怎么写。

    核心关键词生成器函数能否用 new 调用
    #函数与作用域
  40. 0140
    JavaScript函数与作用域

    怎么从外部停掉一个生成器,或者往里面抛一个错误?

    用 generator.return(value) 从外部结束生成器,finally 照样会执行;用 generator.throw(error) 在暂停的 yield 处抛出错误,内部能 catch 就继续,不能就向外传。讲清两者的区别、for...of 中途 break 时发生了什么和常见坑。

    核心关键词外部停止生成器 throw return
    #函数与作用域
  41. 0141
    JavaScript函数与作用域

    生成器里 yield 和 return 有什么区别?return 之后还能继续 next 吗?

    yield 交出一个值并暂停,之后还能继续;return 交出最后一个值并结束生成器。return 之后可以继续调用 next,但只会得到 value 为 undefined、done 为 true 的结果。附 for...of 和展开运算符为什么拿不到 return 的值。

    核心关键词生成器 yield 与 return 区别
    #函数与作用域
  42. 0142
    JavaScript函数与作用域

    var 和 let 都会提升吗?为什么 let 在声明前访问会报错?

    var、let、const 其实都会提升,区别在初始化时机:var 提升后立刻是 undefined,let 和 const 在声明语句执行前处于暂时性死区,一读就抛 ReferenceError。附代码对比、typeof 为什么也会报错、函数声明和 class 的提升规则。

    核心关键词var let 变量提升 暂时性死区
    #函数与作用域
  43. 0143
    JavaScript函数与作用域

    什么是 IIFE?现在有了 let 和模块,它还有什么用?

    IIFE 是定义完马上调用的函数表达式。讲清为什么要在外面套一层括号、它在没有块作用域和模块的年代怎样隔离变量、怎样用闭包做私有状态,以及现在还会在哪些场景用到,比如 async IIFE 和一次性初始化。

    核心关键词IIFE 立即执行函数 用途
    #函数与作用域
  44. 0144
    JavaScript函数与作用域

    箭头函数写的 IIFE 和普通函数写的 IIFE 有什么区别?

    两种 IIFE 都能立刻执行、都能隔离变量,真正的区别在函数本身:箭头函数没有自己的 this 和 arguments,用的是外层的;普通函数 IIFE 每次调用都有自己的一份。附对象方法里的对比代码、括号写法差异和 async IIFE 的用法。

    核心关键词箭头函数 IIFE 与普通函数区别
    #函数与作用域
  45. 0145
    JavaScript函数与作用域

    函数的 length 是什么?加了默认参数和剩余参数后会变吗?

    函数的 length 是声明时的形参个数,但只数到第一个带默认值的参数为止,剩余参数不算,解构参数算一个。附代码逐个验证、bind 之后 length 怎么变,以及柯里化依赖 length 时会踩的坑。

    核心关键词函数 length 属性 默认参数 剩余参数影响
    #函数与作用域
  46. 0146
    JavaScript函数与作用域

    什么是词法作用域?作用域链是怎么形成的?

    词法作用域的意思是:函数能读到哪些变量,看它写在哪里,不看在哪里被调用。用一段代码证明调用位置不影响变量查找,讲清作用域链怎样一层层往外找、同名变量怎样遮蔽,以及它和闭包、原型链的关系。

    核心关键词JavaScript 词法作用域与作用域链
    #函数与作用域
  47. 0147
    JavaScript函数与作用域

    匿名函数和箭头函数的 name 是怎么来的?

    匿名函数和箭头函数本身没写名字,但赋值给变量、写成对象属性、作为默认参数时,引擎会自动把左边的名字推断成函数的 name。附各种写法的输出对照、赋值给对象属性为什么推断不出来、bind 和 getter 的特殊前缀,以及为什么不能拿 name 做业务判断。

    核心关键词函数 name 属性推断规则
    #函数与作用域
  48. 0148
    JavaScript函数与作用域

    new 一个函数时,内部到底做了哪几步?this 指向谁?

    new 调用函数分四步:创建空对象、把它的原型连到构造函数的 prototype、以它为 this 执行函数、没有返回对象就返回它。附手写 new 的代码、构造函数返回对象会怎样、忘了写 new 会怎样,以及箭头函数为什么不能 new。

    核心关键词new 调用函数内部步骤 this 绑定
    #函数与作用域
  49. 0149
    JavaScript函数与作用域

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

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

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

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

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

    核心关键词对象方法简写与普通函数属性区别
    #函数与作用域
上一页
123456
下一页
前端进阶之旅本地 Markdown 维护 · 服务端分页 · 完整内容对用户与搜索引擎一致