after
"Let go of the thoughts that don't make you strong." —Unknown
本文为 《lodash 源码阅读》 系列文章,后续内容会在 github 中发布,欢迎 star,gitbook 同步更新。
源码
/**
* _.before 的反向函数;此方法创建一个函数,当他被调用n或更多次之后将马上触发func
*
* @since 0.1.0
* @category Function
* @param {number} n func 方法应该在调用多少次后才执行。
* @param {Function} func 受限制执行的函数
* @returns {Function} 返回新的函数。
*/
function after(n, func) {
if (typeof func != 'function') {
throw new TypeError('Expected a function');
}
return function(...args) {
if (--n < 1) {
return func.apply(this, args);
}
};
}
原理
after
首先判断传入的 func
参数类型是否合法,再通过闭包方式缓存次数变量 n
跟 func
,返回新的函数,在每次执行返回函数,n
次数减少,当 --n < 1
之后,之后再执行,则会执行 func
方法。
const done = after(3, function() {
console.log('done!');
});
done(); // n = 2
done(); // n = 1
done(); // n = 0 执行 func,输出 "done!"
这里有一个注意点是 --n < 1
,JavaScript 在执行前置递增和递减操作时,变量的值都是在语句被求值以前改变的。(在计算机科学领域,这种 情况通常被称作副效应。)
n = 2;
--n === 1; // true
n = 2;
n-- === 1; // false
相关链接
Last updated
Was this helpful?