函数式编程之高级函数

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()//不调用

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

你可能感兴趣的:(javascript,函数式编程,高级函数,map,once)