- /**
- * 创建延迟指定时间后执行的函数 fn, 如果在延迟时间内再次执行该方法, 将会根据指定的 exclusion 的值,
- * 决定是否取消前一次函数的执行, 如果 exclusion 的值为 true, 则取消执行, 反之, 将继续执行前一个方法
- * @method defer
- * @param {Function} fn 需要延迟执行的函数对象
- * @param { int } delay 延迟的时间, 单位是毫秒
- * @param { Boolean } exclusion 如果在延迟时间内再次执行该函数, 该值将决定是否取消执行前一次函数的执行,
- * 值为 true 表示取消执行, 反之则将在执行前一次函数之后才执行本次函数调用
- * @warning 该方法的时间控制是不精确的, 仅仅只能保证函数的执行是在给定的时间之后,
- * 而不能保证刚好到达延迟时间时执行
- * @return { Function } 目标函数 fn 的代理函数, 只有执行该函数才能起到延时效果
- * @example
- * ```javascript
- *
- * function test(){
- * console.log(1);
- * }
- *
- * var testDefer = defer( test, 1000, true );
- *
- * //output: (两次调用仅有一次输出) 1
- * testDefer();
- * testDefer();
- * ```
- */
- function defer(fn, delay, exclusion) {
- var timerID;
- return function () {
- if (exclusion) {
- clearTimeout(timerID);
- }
- timerID = setTimeout(fn, delay);
- };
来源: https://www.2cto.com/kf/201803/726986.html