柯里化
- 柯里化函数:
- 一个函数接收多个参数能够完成功能,柯里化函数就是将这一个函数拆分为两个函数
- 每个函数都只能接收一个参数,然后完成的功能相同
function fn(fnReg) {
return function (fnStr) {
console.log(fnReg.test(fnStr))
}
}
const testNum = fn(/^\d{5,8}$/)
testNum('1234')
函数的柯里化封装
function fn(a,b,c,d){
return a + '://' + b + ':' + c + d
}
function curry(callback,...arg){
return function (..._arg){
_arg = [...arg,..._arg]
if(_arg.length === callback.length){
return callback(..._arg)
}else {
return curry(callback,..._arg)
}
}
}
let newFn = curry(fn,'http')
const newFn2 = newFn('127.0.0.1', '8080')
const newFn3 = newFn2('/index.html')
console.log(newFn3)
节流
- 事件在执行时,第一次开始执行时,在结束之前或者在指定时间之前,无法触发下一次
- 除非等到第一次执行结束或者在指定时间到达后,才可以进行下一次
<input type="text" class="inp">
const inp = document.querySelector('.inp')
let flag = true
inp.oninput = function () {
if(flag === false)return
flag = false
setTimeout(() => {
flag = true
console.log(this.value)
},300)
}
;(function fn (num){
console.log('我是一个普通的函数 fn', num)
})(99)
inp.onclick = (function (flag){
return function fn (){
if(flag === false) return
flag = false
setTimeout (() => {
flag = true
console.log(this.value)
},300)
}
})(true)
防抖
- 事件在开始执行时,如果快速触发了第二次,那么第二次会取代第一次,只会执行最后一次
<input type="text" class="inp">
const inp = document.querySelector('.inp')
let timer = 0
inp.oninput = function(){
clearTimeout(timer)
timer = setTimeout(() => {
console.log(this.value)
},300)
}
inp.oninput = (function (timer) {
return function () {
clearTimeout(timer)
timer = setTimeout(() => {
console.log(this.value)
},300)
}
})(0)