柯里化函数
// 柯里化函数
function add(a, b, c, d) {
return a + b + c + d;
}
function FixedParmasCurry(fn) {
var args = [].slice.call(arguments, 1); //截取fn需要的参数
return function () {
var newArg = args.concat([].slice.call(arguments, 0)); //传的参数拼接
return fn.apply(this, newArg) //返回一个函数
}
}
function Curry(fn, length) {
console.log([fn])
var length = length || fn.length;
if (arguments.length < length) {
var arr = [fn].concat([].slice(arguments, 0)); //[fn,第一次传的参数]
return Curry(FixedParmasCurry.apply(this, arr), length - arguments.length);
}
else {
return fn.apply(this, arguments)
}
}
var newAdd = Curry(add);
防抖
//防抖
function debounce(handler, delay) {
var timer = null;
return function () {
var self = this, args = arguments;
clearTimeout(timer);
timer = setTimeout(function () { //设定多少时间后在执行,在input输入时,onInput在输入完才执行一次
handler.apply(self, args);
}, delay)
}
}
节流
//节流 如;抢票规定多少时间内只能点击一次
function throttle(handler, wait) { //wait是规定的等待的时间
var lastTime = 0; //上一个时间
return function (e) {
var newTime = new Date().getDate();
if (newTime - lastTime > wait) {
handler.apply(this, arguments);
lastTime = newTime;
}
}
}
纯函数
一个函数的返回结果只依赖于它的参数,并且在执行过程里面没有副作用,我们就把这个函数叫做纯函数。
纯函数
function sum(a,b){
return a + b
}
非纯函数
var c = 0;
function sum(a, b) {
return c = a + b;
}
sum(1, 2);