oop
fp
initialState从头到尾都没有变化
fp更喜欢递归代替循环
pure function
side effect
使用递归实现for循环
- 递归实现数组的累加
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
function sumArr(arr, i) {
if (i === arr.length) return 0;
return arr[i] + sumArr(arr, i + 1);
}
const sum = sumArr(arr, 0);
console.log("sum = " + sum);
- 更加简化的形式
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
function sumArr(arr, i) {
return i === arr.length ? 0 : arr[i] + sumArr(arr, i + 1);
}
const sum = sumArr(arr, 0);
console.log("sum = " + sum);
声明式编程和命令式变量
不使用内置函数
- 再次升级
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
// 乞丐版
function filterOdd(arr) {
if (arr.length === 0) return [];
if (arr[0] % 2 === 1) {
return [arr[0], ...filterOdd(arr.slice(1))];
}
return filterOdd(arr.slice(1));
}
// 装x版
function filterOdd(arr) {
return arr.length === 0
? []
: arr[0] % 2 === 1
? [arr[0], ...filterOdd(arr.slice(1))]
: filterOdd(arr.slice(1));
}
const res = filterOdd(arr);
console.log("res = ", res);
感谢
- 感谢油管上个一个台湾小哥哥的分享的视频,走歪的james,原视频可以去搜一下