1.2 函数与作用域
函数是 JavaScript 的核心概念,它是可重用的代码块。作用域决定了变量的可访问范围。
一、函数定义
1. 函数声明(命名函数)
1 | function greet(name) { |
2. 函数表达式(匿名函数)
1 | const greet = function(name) { |
3. 箭头函数(ES6)
1 | const greet = (name) => { |
4. 立即执行函数(IIFE)
1 | (function() { |
二、参数
1. 默认参数
1 | function greet(name = "张三") { |
2. 剩余参数
1 | function sum(...nums) { |
3. 解构参数
1 | function createUser({ name, age, city = "北京" }) { |
4. 参数验证
1 | function divide(a, b) { |
三、返回值
1 | // 显式返回 |
四、作用域
1. 作用域链
1 | let global = "全局变量"; |
2. 块级作用域
1 | // var:函数作用域 |
3. 作用域示例
1 | let globalVar = "全局"; |
五、闭包
定义
闭包是指函数能够访问其外部作用域的变量,即使外部函数已经执行完毕。
示例
1 | function outer() { |
应用场景
1 | // 1. 数据私有化 |
六、this 关键字
1. 普通函数
1 | // 严格模式下 this 为 undefined |
2. 对象方法
1 | const person = { |
3. 箭头函数
1 | const person = { |
4. call/apply/bind
1 | function greet(greeting = "你好") { |
七、高阶函数
函数作为参数或返回值的函数。
1. 函数作为参数
1 | function operate(a, b, operation) { |
2. 函数作为返回值
1 | function multiplyBy(n) { |
3. 常用高阶函数
1 | const nums = [1, 2, 3, 4, 5]; |
八、递归
函数调用自身。
1 | // 阶乘 |
九、总结
- 函数声明会被提升,表达式不会
- 箭头函数没有自己的 this,继承外层
- 闭包让函数能访问外部作用域变量
- 高阶函数让代码更简洁、可复用
- 递归要设置终止条件,避免栈溢出