JavaScript 函数
函数是 JavaScript 中的基本构建块,它们是执行特定任务或计算的可重用代码块。函数使代码更加模块化和可维护。
什么是函数?
函数是一组封装在一起用于执行特定任务的语句。函数可以接收输入(参数),处理这些输入,并返回结果。
函数声明
函数声明语法
javascript
function functionName(parameter1, parameter2, ...) {
// 函数体
// 执行的代码
return returnValue; // 可选
}简单示例
javascript
// 声明一个函数
function greet(name) {
return `你好,${name}!`;
}
// 调用函数
let message = greet("张三");
console.log(message); // 输出:你好,张三!函数表达式
函数表达式是将函数存储在变量中:
javascript
// 函数表达式
let add = function(a, b) {
return a + b;
};
// 调用函数
let sum = add(5, 3);
console.log(sum); // 输出:8箭头函数
ES6 引入了箭头函数语法,提供了一种更简洁的函数书写方式:
javascript
// 箭头函数
let multiply = (a, b) => {
return a * b;
};
// 如果只有一个表达式,可以省略大括号和 return 关键字
let subtract = (a, b) => a - b;
// 如果只有一个参数,可以省略括号
let square = x => x * x;
// 调用箭头函数
console.log(multiply(4, 5)); // 输出:20
console.log(subtract(10, 3)); // 输出:7
console.log(square(6)); // 输出:36参数
默认参数
ES6 允许为函数参数设置默认值:
javascript
function greet(name = "朋友") {
return `你好,${name}!`;
}
console.log(greet()); // 输出:你好,朋友!
console.log(greet("李四")); // 输出:你好,李四!剩余参数
剩余参数允许我们将不定数量的参数表示为一个数组:
javascript
function sum(...numbers) {
return numbers.reduce((total, num) => total + num, 0);
}
console.log(sum(1, 2, 3)); // 输出:6
console.log(sum(1, 2, 3, 4, 5)); // 输出:15参数解构
javascript
function printPerson({name, age}) {
console.log(`姓名:${name},年龄:${age}`);
}
let person = {name: "王五", age: 30};
printPerson(person); // 输出:姓名:王五,年龄:30返回值
函数可以返回值,也可以不返回值:
javascript
// 有返回值的函数
function add(a, b) {
return a + b;
}
// 无返回值的函数
function logMessage(message) {
console.log(message);
// 隐式返回 undefined
}
let result = add(3, 4); // result = 7
let logResult = logMessage("Hello"); // logResult = undefined作用域和闭包
词法作用域
javascript
let globalVar = "我是全局变量";
function outerFunction() {
let outerVar = "我是外部函数变量";
function innerFunction() {
let innerVar = "我是内部函数变量";
console.log(globalVar); // 可以访问全局变量
console.log(outerVar); // 可以访问外部函数变量
console.log(innerVar); // 可以访问自己的变量
}
innerFunction();
}
outerFunction();闭包
闭包是指函数能够访问其外部作用域中的变量:
javascript
function createCounter() {
let count = 0;
return function() {
count++;
return count;
};
}
let counter = createCounter();
console.log(counter()); // 输出:1
console.log(counter()); // 输出:2
console.log(counter()); // 输出:3高阶函数
高阶函数是以函数为参数或返回函数的函数:
javascript
// 以函数为参数的函数
function operate(operation, a, b) {
return operation(a, b);
}
let add = (a, b) => a + b;
let multiply = (a, b) => a * b;
console.log(operate(add, 5, 3)); // 输出:8
console.log(operate(multiply, 5, 3)); // 输出:15
// 返回函数的函数
function multiplier(factor) {
return function(number) {
return number * factor;
};
}
let double = multiplier(2);
let triple = multiplier(3);
console.log(double(5)); // 输出:10
console.log(triple(5)); // 输出:15立即执行函数表达式 (IIFE)
立即执行函数表达式是在定义后立即执行的函数:
javascript
(function() {
console.log("我是立即执行函数!");
})();
// 带参数的 IIFE
(function(name) {
console.log(`你好,${name}!`);
})("张三");方法
当函数作为对象的属性时,称为方法:
javascript
let calculator = {
add: function(a, b) {
return a + b;
},
subtract: function(a, b) {
return a - b;
},
// ES6 简写方法
multiply(a, b) {
return a * b;
}
};
console.log(calculator.add(5, 3)); // 输出:8
console.log(calculator.subtract(5, 3)); // 输出:2
console.log(calculator.multiply(5, 3)); // 输出:15递归函数
递归函数是调用自身的函数:
javascript
// 计算阶乘
function factorial(n) {
if (n <= 1) {
return 1;
}
return n * factorial(n - 1);
}
console.log(factorial(5)); // 输出:120
// 斐波那契数列
function fibonacci(n) {
if (n <= 1) {
return n;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
console.log(fibonacci(7)); // 输出:13实际应用示例
javascript
// 表单验证函数
function validateEmail(email) {
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return emailRegex.test(email);
}
function validateForm(formData) {
let errors = [];
if (!formData.name) {
errors.push("姓名不能为空");
}
if (!validateEmail(formData.email)) {
errors.push("邮箱格式不正确");
}
if (formData.password.length < 6) {
errors.push("密码至少需要6位");
}
return {
isValid: errors.length === 0,
errors: errors
};
}
// 使用示例
let userData = {
name: "张三",
email: "zhangsan@example.com",
password: "123456"
};
let validationResult = validateForm(userData);
if (validationResult.isValid) {
console.log("表单验证通过!");
} else {
console.log("验证错误:", validationResult.errors);
}函数是 JavaScript 编程的核心,掌握函数的使用对于编写高质量的代码至关重要。