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 方法。
这里有一个注意点是 --n < 1,JavaScript 在执行前置递增和递减操作时,变量的值都是在语句被求值以前改变的。(在计算机科学领域,这种 情况通常被称作副效应。)
相关链接
Last updated
Was this helpful?