各位代码魔法师们,今天我们要学习编程中最强大的魔法之一——函数!它就像哈利·波特的"分身咒",能让一段代码重复使用,随叫随到!
5.1 函数定义与调用 - 创造你的第一个"分身"
函数就像一台自动售货机:
- 你投入参数(硬币)
- 它执行操作(处理)
- 返回结果(吐出饮料)
// 定义函数
function makeCoffee(type) {
return `一杯${type}咖啡`;
}
// 调用函数
let myCoffee = makeCoffee("拿铁");
console.log(myCoffee); // 输出:一杯拿铁咖啡
生活小例子:
function singSong(name) {
console.log(`生日快乐,${name}!`);
console.log("祝你永远开心~");
}
singSong("小明"); // 给小明唱生日歌
singSong("小红"); // 给小红唱同样的歌
5.2 参数与返回值 - 函数的"输入和输出"
参数就像点菜单:
function orderFood(food, quantity) {
console.log(`下单:${quantity}份${food}`);
return quantity * 10; // 假设每份10元
}
let total = orderFood("汉堡", 3);
console.log(`总价:${total}元`);
特殊参数情况:
function showCase(a, b = 10) { // 默认参数
console.log(a, b);
}
showCase(1); // 1 10
showCase(1, 2); // 1 2
5.3 函数表达式 - 匿名函数也精彩
函数可以像变量一样赋值:
const sayHi = function(name) {
console.log(`你好,${name}!`);
};
sayHi("匿名函数"); // 输出:你好,匿名函数!
真实场景应用:
// 计算器函数
const calculate = function(a, b, operator) {
switch (operator) {
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return a / b;
default: return NaN;
}
};
console.log(calculate(5, 3, '+')); // 8
5.4 箭头函数 - 简洁的现代语法
ES6带来的超简洁写法:
// 传统函数
const add = function(a, b) {
return a + b;
};
// 箭头函数
const add = (a, b) => a + b;
多种写法:
// 一个参数可以省略括号
const square = x => x * x;
// 多行代码需要加大括号和return
const greet = name => {
const message = `Hello, ${name}!`;
return message;
};
注意:箭头函数没有自己的this
,这在后面面向对象时会很重要!
5.5 回调函数 - 函数的"预约服务"
回调函数就是"等会儿再调用的函数":
// 模拟点餐后等餐
function order(callback) {
console.log("下单中...");
setTimeout(() => {
console.log("餐点准备好了!");
callback();
}, 2000); // 2秒后执行
}
function eat() {
console.log("开吃啦!");
}
order(eat); // 把eat函数作为回调传入
实际应用场景:
// 模拟下载完成后处理数据
function download(url, success, failure) {
console.log(`开始下载:${url}`);
// 模拟网络请求
setTimeout(() => {
if (Math.random() > 0.3) { // 70%成功率
success("下载的数据");
} else {
failure("网络错误");
}
}, 1000);
}
download(
"https://example.com/data",
data => console.log(`处理数据:${data}`),
err => console.error(`错误:${err}`)
);
5.6 递归函数 - 函数的"俄罗斯套娃"
函数调用自己就是递归:
// 计算阶乘:5! = 5*4*3*2*1
function factorial(n) {
if (n === 1) return 1; // 终止条件
return n * factorial(n - 1);
}
console.log(factorial(5)); // 120
趣味例子 - 倒计时:
function countdown(n) {
if (n <= 0) {
console.log("发射!");
return;
}
console.log(n);
setTimeout(() => countdown(n - 1), 1000); // 1秒后递归
}
countdown(5); // 5...4...3...2...1...发射!
本章总结:
- 函数是可重复使用的代码块
- 参数是输入,返回值是输出
- 函数表达式将函数赋给变量
- 箭头函数提供简洁语法
- 回调函数用于异步操作
- 递归是函数调用自身
实战练习:
写一个温度转换函数:
function celsiusToFahrenheit(c) {
// 转换公式:F = C × 9/5 + 32
return ?;
}
console.log(celsiusToFahrenheit(25)); // 应该是77
- 用递归实现斐波那契数列(1,1,2,3,5,8...第n项)
- 创建一个定时任务函数:
function repeatTask(task, times, interval) {
// task: 回调函数
// times: 执行次数
// interval: 间隔毫秒数
}
生活剧场:
// 自动做奶茶的工厂函数
function createTeaMaker(teaType) {
return function(sugarLevel) {
return `制作一杯${teaType}奶茶,甜度${sugarLevel}%`;
};
}
const makeMilkTea = createTeaMaker("珍珠");
console.log(makeMilkTea(50)); // 制作一杯珍珠奶茶,甜度50%
下一章我们将进入JavaScript的魔法核心——对象与面向对象编程!准备好解锁更强大的技能了吗?