函数式编程之高级函数

1.map 

//['1','2','3'].map(parseInt) 结果为 [1,NaN,NaN] 为什么
//首先 parseInt 接受一个参数是是取整  两参数是取整根据第二参数变进制
//如parseInt('101',2)->5
//arr.map(parseInt)->parseInt('1') 1,parseInt('2','1') NAN,parseInt('3','2') NAN
//解决 1
['1','2','3'].map(a=>parseInt(a)) //[1,2,3]
//解决 2
function unary(fn){
	return fn.length==1?fn:function(arg){
			return fn(arg)
		}
			
}
['1','2','3'].map(unary(parseInt))
//解决3
function map(Array,fn){
	let results=[]
	for (const i of Array) {
		results.push(fn(i))
	}
	return results;
}

2.memoized 保存全局上下文 解决回调  问题方案 

//使用递归使代码简洁 让逻辑更容易接受 
//但是递归是将先每一层计算 计算到底然后将结果一层一层返回  所以速度慢 性能差
//如何优化递归


//思路 回调 每次都要等待上一步完成才能拿到结果 为什么 不用  对象存储结果 

function recursion(n){
	if(n==0){
		return 1;
	}
	return recursion(n-1)*n
} 
//memozied缓存
function memozied(fn){
	const cache={};
	return function(arg){
		return cache[arg]||(cache[arg]=fn(arg))
	}
}
var neeRecu=memozied(recursion);

console.time("timer");
recursion(1000)
console.timeEnd("timer");
//timer: 0.251953125ms
console.time("timer");
neeRecu(1000)
console.timeEnd("timer");
//timer: 0.090087890625ms
 

3.once 有些函数 只执行一次

function once(fn){
	var done=false;
	return function(){
		return done?undefined:(done=true,fn.apply(this,arguments))
	}
}
//dome
function holle(){
	console.log('holle word')
}
var prone=once(holle);

prone()//holle word
prone()//不调用

总结: 函数式编程大部分都依赖于闭包产生的变量,也称内存泄漏,变量无法自动销毁,需要手动释放内存

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值