function currying(fn) {
return (...argu) => {
let result = fn(argu)
function _fn(...argu) {
argu = argu.concat(result)
result = fn(argu)
_fn.toString = () => result
return _fn
}
_fn()
return _fn
}
}
function _add(argu) {
return argu.reduce((result, currentItem) => result + +currentItem, 0)
}
function _store(argu) {
return argu.reduce((result, currentItem) => result * +currentItem, 1)
}
const add = currying(_add)
const store = currying(_store)
console.log(add(1)(2)(3))
console.log(add(1, 2)(3))
console.log(store(1, 2)(3)(4))
function debounce(cb, time) {
let timeId = null
return () => {
if (timeId) clearTimeout(timeId)
timeId = setTimeout(cb, time)
}
}
function throttle(cb, time) {
let preDate = new Date().getTime()
return () => {
const nowDate = new Date().getTime()
if (nowDate - preDate >= time) {
cb()
preDate = nowDate
}
}
}
console