一、高阶函数是对其他函数进行操作的函数,操作可以是将它们作为参数,或者是返回它们。 简单来说,高阶函数是一个接收函数作为参数或将函数作为输出返回的函数。
【示例】Array.prototype.map,Array.prototype.filter 和 Array.prototype.reduce 是语言中内置的一些高阶函数。 |
---|
二、高阶函数的核心是闭包,利用闭包缓存一些未来会用到的变量,可以实现柯里化、偏应用…
应用
节流
【见】节流:https://www.yuque.com/webfront/js/vcwe7d
防抖
【见】防抖:https://www.yuque.com/webfront/js/ldeqn8
惰性函数
一、当我们需要重复使用一个逻辑的时候,优化逻辑判断,提高 JavaScript 性能
二、原理:同名函数覆盖
| 【示例】```javascript function createXHR() { var xhr try { xhr = new XMLHttpRequest() } catch (e) { handleErr(e) try { xhr = new ActiveXObject(‘Msxml2.XMLHTTP’) } catch (e) { try { xhr = new ActiveXObject(‘Microsoft.XMLHTTP’) } catch (e) { xhr = null } } } return xhr }
function handleErr(e) { // do sth }
|
| --- |
| 【示例】惰性函数修改版:```javascript
function createXHR() {
var xhr
if(typeof XMLHttpRequest !== 'undefined') {
xhr = new XMLHttpRequest()
createXHR = function() {
return new XMLHttpRequest()
}
} else {
try {
xhr = new ActiveXObject('Msxml2.XMLHTTP')
createXHR = function() {
return new ActiveXObject('Msxml2.XMLHTTP')
}
} catch(e) {
try {
xhr = new ActiveXObject('Microsoft.XMLHTTP')
createXHR = function() {
return new ActiveXObject('Microsoft.XMLHTTP')
}
} catch(e) {
createXHR = function() {
return null
}
}
}
}
return xhr
}
1、通过上面修改之后,当我们在第一次调用这个函数的时候就会去判断当前的环境,进而将函数优化简写,不需要再进行后续的判断
2、比如,上述代码中的 XMLHTTPRequest 如果是存在的,那么当我们第二次调用这个函数的时候已经是这样了```javascript
function createXHR() {
return new XMLHttpRequest()
}
|
| --- |
三、使用场景:
- 频繁使用同一判断逻辑
- 只需要判断一次,后续使用环境稳定
<a name="Jhezp"></a>
### <br /><br />
<a name="Nf8YC"></a>
## 级联函数
一、其实就是链式调用,所以原理也就很简单:在每个方法中将对象本身 return 出去
| 【示例】假设我们有一个 Person 模板```javascript
function Person() {}
// 添加几个方法
Person.prototype = {
setName: function (name) {
this.name = name
return this
},
setAge: function (age) {
this.age = age
return this
},
setSex: function (sex) {
this.sex = sex
},
}
// 别忘了重新指定一下构造函数
Person.constructor = Person
let person = new Person()
// 这样看起来做了很多重复的事情,稍微修改一下,在每个方法中将 this return 出来就可以达到 链式调用的效果
person.setName('游荡de蝌蚪')
person.setAge(18)
person.setSex('male')
// 修改之后
person.setName('游荡de蝌蚪').setAge(18).setSex('male')
console.log(person)
| | —- |
二、优缺点
- 优点:简化了函数调用的步骤,我们不需要再写一些重复的东西
- 缺点:占用了函数的返回值