JavaScript 函数
函数是封装了一段可复用代码的块。你定义一次,就可以在任何地方调用它——传入不同的数据,得到不同的结果。
声明函数
javascript
function greet(name) {
return `你好,${name}!`;
}
// 调用函数
console.log(greet('张三')); // "你好,张三!"
console.log(greet('李四')); // "你好,李四!" function— 关键字,声明一个函数greet— 函数名(name)— 参数列表,调用时传入的值return— 返回值(没有 return 则返回undefined){}— 函数体,执行的代码
参数
参数与实参
javascript
function add(a, b) { // a、b 是参数(parameter)
return a + b;
}
add(3, 5); // 3、5 是实参(argument),返回 8 JavaScript 不检查参数数量——多了忽略,少了变为 undefined:
javascript
function log(a, b) {
console.log(a, b);
}
log(1); // 1 undefined(b 未传入)
log(1, 2, 3); // 1 2(多余的 3 被忽略) 默认参数
javascript
function greet(name = '用户') {
return `你好,${name}!`;
}
console.log(greet('张三')); // "你好,张三!"
console.log(greet()); // "你好,用户!" rest 参数(...)
将剩余的所有参数收集到一个数组中:
javascript
function sum(...numbers) {
return numbers.reduce((total, n) => total + n, 0);
}
console.log(sum(1, 2, 3)); // 6
console.log(sum(1, 2, 3, 4)); // 10 return — 返回值
return 立即结束函数执行,并将后面的值返回给调用者:
javascript
function max(a, b) {
if (a > b) return a;
return b;
}
console.log(max(10, 20)); // 20 没有 return 或只有 return; 的函数返回 undefined。
函数表达式
将函数赋给变量:
javascript
const greet = function(name) {
return `你好,${name}!`;
};
greet('张三'); // "你好,张三!" 函数声明和函数表达式的主要区别:函数声明会提升(可以在声明前调用),函数表达式不会。
箭头函数(Arrow Function)
ES6 引入的更简洁的函数写法:
javascript
// 完整语法
const add = (a, b) => {
return a + b;
};
// 只有一条 return 语句时可省略花括号和 return
const add = (a, b) => a + b;
// 只有一个参数时可省略参数的括号
const square = x => x * x;
// 没有参数时必须写空括号
const sayHello = () => 'Hello';
// 返回对象字面量时加括号(否则 {} 会被当成函数体)
const makeUser = name => ({ name }); 箭头函数和普通函数有一个关键区别:箭头函数没有自己的 this,它的 this 继承自外层作用域。这意味着箭头函数不适合作为对象方法(需要 this 指向对象本身时),但非常适合回调函数(map、filter、事件监听器中使用外层 this 的场景)。关于 this 的基础用法,见 对象基础 章节。
回调函数
函数可以作为参数传递给另一个函数——这称为回调(callback):
javascript
// 自定义 forEach
function forEach(array, callback) {
for (const item of array) {
callback(item);
}
}
forEach([1, 2, 3], item => {
console.log(item * 2);
});
// 输出:2 4 6 回调是 JavaScript 异步编程的基础,也是 map、filter、事件监听器等 API 的核心机制。
函数定义方式速查
| 方式 | 语法 | 提升 | 适用场景 |
|---|---|---|---|
| 函数声明 | function f() {} | 是 | 通用,可自由定义 |
| 函数表达式 | const f = function() {} | 否 | 需要赋值给变量时 |
| 箭头函数 | const f = () => {} | 否 | 简短函数、回调 |
日常使用建议:顶层工具函数用函数声明,回调参数用箭头函数,赋值给变量的函数用函数表达式或箭头函数(两者在此场景下差别不大)。整个项目中保持一致即可。