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 },原数据未变为什么重要?