函数
函数是 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 与外层保存引用。
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 + 作用域与闭包 避免污染全局。