一、统计函数执行次数
常规的方法可以使用 console.log 输出来肉眼计算有多少个输出
不过在chrome中内置了一个 console.count 方法,可以统计一个字符串输出的次数。我们可以利用这个来间接地统计函数的执行次数
function somefunction() { console.count('some 已经执行');}function otherfunction() { console.count('other 已经执行');}somefunction(); // some 已经执行: 1somefunction(); // some 已经执行: 2otherfunction(); // other 已经执行: 1console.count(); // default: 1console.count(); // default: 2
不带参数则为 default 值,否则将会输出该字符串的执行次数,观测起来还是挺方便的
当然,除了输出次数之外,还想获取一个纯粹的次数值,可以用装饰器将函数包装一下,内部使用对象存储调用次数即可
var getfuncalltimes = (function() { // 装饰器,在当前函数执行前先执行另一个函数 function decoratorbefore(fn, beforefn) { return function() { var ret = beforefn.apply(this, arguments); // 在前一个函数中判断,不需要执行当前函数 if (ret !== false) { fn.apply(this, arguments); } }; } // 执行次数 var funtimes = {}; // 给fun添加装饰器,fun执行前将进行计数累加 return function(fun, funname) { // 存储的key值 funname = funname || fun; // 不重复绑定,有则返回 if (funtimes[funname]) { return funtimes[funname]; } // 绑定 funtimes[funname] = decoratorbefore(fun, function() { // 计数累加 funtimes[funname].calltimes++; console.log('count', funtimes[funname].calltimes); }); // 定义函数的值为计数值(初始化) funtimes[funname].calltimes = 0; return funtimes[funname]; }})();function somefunction() { }function otherfunction() { }somefunction = getfuncalltimes(somefunction, 'somefunction');somefunction(); // count 1somefunction(); // count 2somefunction(); // count 3somefunction(); // count 4console.log(somefunction.calltimes); // 4otherfunction = getfuncalltimes(otherfunction);otherfunction(); // count 1console.log(otherfunction.calltimes); // 1otherfunction(); // count 2console.log(otherfunction.calltimes); // 2
如何控制函数的调用次数
也可以通过闭包来控制函数的执行次数
function somefunction() { console.log(1);}function otherfunction() { console.log(2);}function setfuncallmaxtimes(fun, times, nextfun) { return function() { if (times-- > 0) { // 执行函数 return fun.apply(this, arguments); } else if (nextfun && typeof nextfun === 'function') { // 执行下一个函数 return nextfun.apply(this, arguments); } };}var fun = setfuncallmaxtimes(somefunction, 3, otherfunction);fun(); // 1fun(); // 1fun(); // 1fun(); // 2fun(); // 2
以上就是javascript中如何统计函数执行次数?(详解)的详细内容。
