前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
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 · 函数与作用域面试题,39 道完整答案

JavaScript · 函数与作用域面试题第 1 页,显示第 1–39 题,共找到 39 道完整解析,可继续按分类、标签与关键词缩小范围。

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

正在显示第 1–39 题

JavaScript39
第 1 页

本页面试问题

按稳定语义路径排序

  1. 0001
    JavaScript函数与作用域

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    addEventListener 的回调里,this 指向谁?

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

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

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

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

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

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

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

    核心关键词yield* 委托可迭代对象
    #函数与作用域
上一页
1
下一页
前端进阶之旅本地 Markdown 维护 · 服务端分页 · 完整内容对用户与搜索引擎一致