让JS函数懒惰执行lazyApply

我只能说,这是一个很有用的函数。

输入“1”试试:<input id="test1" value="">
<script>
/**
* 懒惰执行某函数:一直到不得不执行的时候才执行。
* @method lazyApply
* @static
* @param {Function} fun 调用函数
* @param {Object} thisObj 相当于apply方法的thisObj参数
* @param {Array} argArray 相当于apply方法的argArray参数
* @param {int} ims interval毫秒数,即window.setInterval的第二个参数.
* @param {Function} checker 定期运行的判断函数,传给它的参数为:checker.call(thisObj,argArray,ims,checker)。为空时则表示单纯defer执行<br/>
对于不同的返回值,得到不同的结果:<br/>
返回true或1,表示需要立即执行<br/>
返回-1,表示成功偷懒,不用再执行<br/>
返回其它值,表示暂时不执行<br/>
@return {int} 返回interval的timerId
*/
function lazyApply(fun, thisObj, argArray, ims, checker) {
var timer = function() {
checker
= checker || function() {return true; };
var verdict = checker.call(thisObj, argArray, ims, timerId);
if (verdict == 1) {
fun.apply(thisObj, argArray
|| []);
}
if (verdict == 1 || verdict == -1) {
clearInterval(timerId);
}
};
var timerId = setInterval(timer, ims);
return timerId;
}


lazyApply(
function(){alert('我很懒,我只说一次啊,你别在这里输入1;');},//懒员工
null,
[],
10,
function(){return document.getElementById('test1').value=="1";}//勤快的监工
);
</script>
原文地址:https://www.cnblogs.com/jkisjk/p/qwrpa_lazyApply.html