闽公网安备 35020302035485号
5.函数组合和柯里化
const applyDiscount = (discount) => (price) => price * (1 - discount); // 返回一个应用折扣的函数 const discount10 = applyDiscount(0.1); // 10% 折扣 console.log(discount10(100)); // 输出:90为什么重要?这种写法可以让逻辑更抽象、更复用。函数像工厂一样,根据业务需求随时“组装”成新的功能。
const createClickCounter = () => {
let count = 0; // 私有变量
return () => ++count; // 每次调用都会增加计数
};
// 堆代码 duidaima.com
const clickCounter = createClickCounter();
console.log(clickCounter()); // 输出:1
console.log(clickCounter()); // 输出:2
为什么重要?const orders = [50, 150, 200, 80]; const total = orders .filter((order) => order > 100) // 筛选出大于 100 的订单 .reduce((sum, order) => sum + order, 0); // 求和 console.log(total); // 输出:350为什么重要?
const isWithinAgeRange = (min, max) => (age) => age >= min && age <= max; const isTeenager = isWithinAgeRange(13, 19); // 创建一个专门判断青少年的函数 console.log(isTeenager(15)); // 输出:true console.log(isTeenager(22)); // 输出:false为什么重要?
const trim = (str) => str.trim(); // 去掉空格
const isValidPhone = (str) => /^\d{10}$/.test(str); // 校验手机号
const formatPhone = (str) => str.replace(/(\d{3})(\d{3})(\d{4})/, "$1-$2-$3"); // 格式化
const processPhoneNumber = (phone) => {
const trimmed = trim(phone);
if (!isValidPhone(trimmed)) {
return "手机号不合法";
}
return formatPhone(trimmed);
};
console.log(processPhoneNumber(" 1234567890 ")); // 输出:123-456-7890
console.log(processPhoneNumber(" 123 ")); // 输出:手机号不合法
为什么重要?const addField = (user, field, value) => ({ ...user, [field]: value });
const user = { name: "小明", age: 18 };
const updatedUser = addField(user, "gender", "男");
console.log(updatedUser); // 输出:{ name: "小明", age: 18, gender: "男" }
console.log(user); // 输出:{ name: "小明", age: 18 },原数据未变
为什么重要?