高阶函数
在javascript中高阶函数实际上就是控制函数的函数,有别于普通函数传递变量,高阶函数传递的是函数,并且输出函数
这对于js初学者来说足够烧脑,也足够惊艳。
初识时常常会被被震撼了,原来函数还可以这么用
var getSingle = function( fn ){
var result;
return function(){
return result || ( result = fn .apply(this, arguments ));
}
};
这是《JavaScript设计模式与开发实践》的单例模式的一个高阶函数。
地址延迟搜索
对于地址输入页面,我们常常要定位用户的地址,为了保证定位的地址是用户输入的完整地址,我们需要对输入进行延迟处理,用过外卖软件的大家肯定相当熟悉。
实现这一流程的一种如下:
html
<body>
<form action="">
<input type="text" id="content">
<div id="result"></div>
</form>
</body>
javascript
var content = document.querySelector('#content')
var result = document.querySelector("#result")
var debounce = function(fn, delay) {
var timer = null
return function(...args) {
clearTimeout(timer);
timer = setTimeout(() => fn.apply(this, args), delay);
}
}
var fetch = function() {
// 异步定位
result.innerHTML = `你搜索的是${content.value}`
}
var search = debounce(fetch, 1500)
content.addEventListener("input", search)
代码分析
html
html代码中input用来获取用户输入,div用来展示用户输入定位到的地址,实际工作中我们会调用地图api异步获取位置信息再展示出来,这里简化为延迟输出用户的输入
javascript
其中fetch函数
用来实现异步获取数据的功能search函数
生成具体的延迟1500ms处理的fetch函数debounce函数
用来实现对于fn的延迟处理,它能创建一个函数用来实现:
清除一次的计时器
创建一个新的计时器
这里debounce其实就是一个高阶函数,他抽象了一个处理fn的过程,它可以处理任意需要该过程的函数fn而不用在意fn具体是什么。这体现了函数的幂等性。
小结
这样具有幂等性高阶函数虽然初见时可能觉得抽象且难以理解,但其不仅体现了数学上逻辑性,也由于它高度抽象使得基本不会被外部变量影响,可以轻松地写出测试用例,可以重复地用在需要该逻辑的脚本中不易出错。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。