第3章: 函数

什么是函数?

函数是一段可以重复使用的代码块,用于执行特定的任务。函数可以接收参数,并返回结果。

函数声明

1. 函数声明 (传统方式)

function greet(name) {
    return "你好, " + name + "!";
}

console.log(greet("张三")); // 输出: 你好, 张三!

2. 函数表达式

const greet = function(name) {
    return "你好, " + name + "!";
};

console.log(greet("李四")); // 输出: 你好, 李四!

3. 箭头函数 (ES6)

const greet = (name) => {
    return "你好, " + name + "!";
};

// 简写形式
const greetSimple = name => "你好, " + name + "!";

console.log(greetSimple("王五")); // 输出: 你好, 王五!

函数参数

1. 默认参数

function greet(name = "朋友") {
    return "你好, " + name + "!";
}

console.log(greet()); // 输出: 你好, 朋友!
console.log(greet("小明")); // 输出: 你好, 小明!

2. 剩余参数

function sum(...numbers) {
    return numbers.reduce((total, num) => total + num, 0);
}

console.log(sum(1, 2, 3, 4, 5)); // 输出: 15

3. 解构参数

function createUser({ name, age, city }) {
    return `用户 ${name}, ${age}岁, 来自${city}`;
}

const user = { name: "张三", age: 25, city: "北京" };
console.log(createUser(user));

函数返回值

函数可以使用 return 语句返回值。如果没有 return 语句,函数返回 undefined。

function add(a, b) {
    return a + b;
}

function logMessage(message) {
    console.log(message);
    // 没有返回值,返回 undefined
}

console.log(add(3, 5)); // 输出: 8
console.log(logMessage("Hello")); // 输出: Hello, 然后输出: undefined

作用域

作用域决定了变量的可访问范围:

// 全局变量
let globalVar = "我是全局变量";

function testScope() {
    // 局部变量
    let localVar = "我是局部变量";
    console.log(globalVar); // 可以访问
    console.log(localVar); // 可以访问
}

console.log(globalVar); // 可以访问
// console.log(localVar); // 错误: 无法访问

回调函数

回调函数是作为参数传递给另一个函数的函数:

function calculate(a, b, callback) {
    return callback(a, b);
}

function add(x, y) {
    return x + y;
}

function multiply(x, y) {
    return x * y;
}

console.log(calculate(5, 3, add)); // 输出: 8
console.log(calculate(5, 3, multiply)); // 输出: 15