1. 函数柯里化
1.函数柯里化: 一个currying函数首先会接受一些参数,接受了这些参数之后,该函数并不会立即求值,而是继续返回另外一个函数,刚才传入的参数在函数形成的闭包中被保存起来。待到函数被真正需要求值的时候,之前传入的所有参数都会被一次性用于求值。
2. 例子1:
function uri_curring (protocol) {
return function (hostname, pathname) {
return `${protocol}${hostname}${pathname}`
}
}
const uri_https = uri_curring('https:// ')
let uri1 = uri_https('www.csdn.com', '/关注')
let uri2 = uri_https('www.csdn.com', '/点赞')
let uri3 = uri_https('www.csdn.com', '/收藏')
console.log(uri1, uri2, uri3);
结果:
3. 例子2:
// 判断兼容哪种事件监听方式
const whichEvent = (function() {
if (window.addEventListener) {
// element :哪个元素需要添加事件监听
// type : 元素需要添加什么类型的事件
// listner : 就是执行的回调函数
// useCapture : 进行事件冒泡 还是 捕获的选择
return function(element, type, listner, useCapture) {
element.addEventListener(type, function(e) {
// 重新this指向
listner.call(element, e)
}, useCapture)
}
} else if (window.attachEvent) {
// ie默认支持事件冒泡
return function(element, type, handler) {
element.attachEvent('on' + type, function(e) {
handler.call(element, e)
})
}
}
})()