函数

函数是 JavaScript 中的一等公民:可赋值、传参、作为返回值,也是 原型与继承 中构造器与 class 方法的基础形态。


三种常见写法

形式示例备注
函数声明function f() {}具名;存在声明提升
函数表达式const f = function () {}可具名(便于栈追踪);无整体提升
箭头函数const f = () => {}prototype,无自有 this / arguments(词法继承外层)

方法简写、getter/setter 等见 ES6+


形参、实参与默认值

  • 实参少于形参:未对应形参为 undefined
  • 默认值(ES2015+)只在传入 undefined 时生效(null 会当作已传入)。
  • 剩余参数 ...rest 收集多余实参为数组,须在形参列表最后。

this 绑定(简表)

调用方式典型 this
obj.method()obj
func()(非严格)全局对象;严格模式为 undefined
new Constructor()新实例
call / apply / bind第一个参数指定的对象

箭头函数不引入自己的 this,由外层词法环境决定(与 作用域与闭包 一致)。DOM 回调里若需 this 指向元素,慎用箭头函数直接作为传统 onclick 等,或显式使用 addEventListener 与外层保存引用。

详见 事件机制DOM与BOM


call / apply / bind

  • fn.call(thisArg, a, b):逐个传参。
  • fn.apply(thisArg, [a, b]):数组形式传参。
  • fn.bind(thisArg, ...):返回新函数,永久绑定 this(及部分柯里化用途)。

高阶函数

接受函数为参数或返回函数的函数:如 Array.prototype.map/filter/reduce异步编程 中的回调与 Promise 链。


IIFE 与历史模块模式

;(function () {
  // 私有作用域
})()

ES6+ 模块化 普及前,常用 IIFE + 作用域与闭包 避免污染全局。


相关链接