Skip to content

参考

基于现代 JavaScript(ES2025 · 核于 2026-06)

速查

  • 函数四形态:声明(提升)、表达式(不提升)、箭头(无自己的 this/arguments/不可 new)、IIFE(即定义即执行)
  • 参数:默认参数(仅 undefined 触发)、剩余参数 ...args(真数组)、arguments(类数组,箭头函数没有)
  • 作用域:let/const 块级、var 函数级;词法作用域=书写位置决定可见性
  • 闭包:函数 + 创建时的词法环境,每次调用外层生成独立闭包;循环陷阱用 let
  • this 四规则优先级:new > 显式(bind/call/apply)> 隐式(obj.f())> 默认(严格 undefined
  • call(逗号) / apply(数组) 立即调用;bind 返回永久绑定的新函数
  • 高阶函数:函数作参数 / 返回值;柯里化(单参链)、偏函数(预填参数)、组合(流水线)
  • 红线:别拿箭头函数当对象方法 / 构造器;方法当回调先 bindthis 丢失

函数四形态对比

特性函数声明函数表达式箭头函数
语法function f(){}const f = function(){}const f = () => {}
提升是(整体)
自己的 this有(调用时定)有(调用时定)无(继承外层)
arguments
能否 new不能
prototype
可否命名必须可选永远匿名

参数机制速查

机制语法要点
默认参数function f(a, b = 1){}仅实参为 undefined 时生效;可引用前面的参数
剩余参数function f(...args){}收集多余实参为真数组;必须是最后一个形参
arguments函数内直接用类数组(有 length、可索引,无数组方法);箭头函数无
展开传参f(...arr)把数组「摊开」为独立实参(常替代 apply

this 四规则速查

优先级规则形式this 指向
1new 绑定new F()新创建的对象
2显式绑定f.call(o) / f.apply(o) / f.bind(o)手动指定的 o
3隐式绑定obj.f()点号前的 obj
4默认绑定f()严格 undefined / 非严格全局对象

箭头函数不参与本表:this 取自定义处外层,call/apply/bind/new 均改不动。

call / apply / bind 速查

方法立即调用参数形式返回
call(thisArg, a, b)逗号分隔函数执行结果
apply(thisArg, [a, b])数组函数执行结果
bind(thisArg, a)逗号分隔(可预填)this 永久绑定的新函数

记忆法:call=comma、apply=array、bind=bound later。

闭包要点

概念说明
词法环境内部对象 = 环境记录(存本层变量)+ 外层引用
[[Environment]]函数隐藏属性,记住创建时所处环境(闭包实现根基)
闭包函数 + 创建时的词法环境;外层执行完仍能访问其变量
独立性每次调用外层函数生成独立闭包(多计数器互不干扰)
循环陷阱var 全闭住最后一个值;用 let/const(每轮新绑定)或工厂 / IIFE
模块模式IIFE/工厂把变量藏进闭包、只暴露方法 → 私有状态
内存闭包引用的环境不回收;不用时解除引用

函数式范式速查

范式定义示例
高阶函数接收函数作参数 / 返回函数mapfilterreduce
柯里化f(a, b, c)f(a)(b)(c),每次收一个(a) => (b) => (c) => …
偏函数预填部分参数,降低元数multiply.bind(null, 2)
组合多个单参函数串成流水线compose(右→左)/ pipe(左→右)

常见坑与对策

现象对策
this 丢失方法当回调 / 取出单独调用 → undefinedbind / 箭头包一层 / 传 thisArg
箭头当方法对象方法里 this 指外层而非对象对象方法用普通函数 / 方法简写
箭头当构造器new arrow()TypeError构造函数用普通函数
循环闭包var 让回调全拿最后一个值let/const
误用 arguments箭头函数里 arguments 不是自己的用剩余参数 ...args
非严格 this独立调用 this 悄悄变全局对象用严格模式 / ES 模块

现代特性 Baseline 状态(2026-06 核)

特性状态说明
箭头函数✅ Baseline 广泛可用ES2015,放心用
默认参数 / 剩余参数✅ Baseline 广泛可用ES2015,放心用
展开运算符(调用 / 数组)✅ Baseline 广泛可用常替代 apply
let / const 块级作用域✅ Baseline 广泛可用现代默认
类字段(含箭头方法)✅ Baseline(2022 起广泛)绑定实例方法的常用写法

权威链接

标准 / 规范

指南 / 教程

兼容性

相关页