//纯函数:相同的输入总是得到相同的输出,并且没有任何可观察的副作用
//副作用:副作用让一个函数变的不纯,纯函数的根据是相同的输入返回相同的输出,"如果函数依赖外部的状态"就无法保证输出相同,就会带来副作用.
//不纯(副作用)
let mini = 18
function checkAge (age){
return age >=mini
}
//纯的(有硬编码)
function checkAge (age){
let mini = 18
return age >=mini
}
//副作用来源:
// 配置文件
// 数据库
// 用户输入
//slice/splice 纯函数/不纯的函数
let arr = [1,2,3,4,5,6,7]
//下标0到下标3,不包含3
console.log(arr.slice(0,3));// [ 1, 2, 3 ]
console.log(arr.slice(0,3));// [ 1, 2, 3 ]
console.log(arr.slice(0,3));// [ 1, 2, 3 ]
//下标0,三个
console.log(arr.splice(0,3));// [ 1, 2, 3 ]
console.log(arr.splice(0,3));// [ 4, 5, 6 ]
console.log(arr.splice(0,3));// [ 7 ]
//纯函数
function add(num1,num2){
return num1 + num2
}
//lodash
const _ = require('lodash')
//记忆函数 memoize
function getArea(r){
console.log(r);
return Math.PI * r * r
}
let r = _.memoize(getArea)
console.log(r(4));
console.log(r(4));
console.log(r(4));
/*
4
50.26548245743669
50.26548245743669
50.26548245743669
*/
//模拟memoize
function memoize(f){
let cache = {}
return function (){
let key = JSON.stringify(arguments)
cache[key] = cache[key] || f.apply(f,arguments)
return cache[key]
}
}
let r = memoize(getArea)
console.log(r(4));
console.log(r(4));
console.log(r(4));