Maison >interface Web >js tutoriel >Comment compter le nombre d'exécutions de fonctions en javascript ? (explication détaillée)

Comment compter le nombre d'exécutions de fonctions en javascript ? (explication détaillée)

不言
不言avant
2018-10-27 14:14:184594parcourir

Le contenu de cet article explique comment compter le nombre d'exécutions de fonctions en JavaScript ? (Explication détaillée) a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère que cela vous sera utile.

1. Temps d'exécution des fonctions statistiques

La méthode conventionnelle peut consister à utiliser la sortie console.log pour calculer visuellement le nombre de sorties

Mais dans Chrome, il existe une méthode console.count intégrée qui peut compter le nombre de fois qu'une chaîne est générée. On peut utiliser cela pour compter indirectement le nombre d'exécutions de la fonction

function someFunction() {
 console.count('some 已经执行');
}
function otherFunction() {
 console.count('other 已经执行');
}
someFunction(); // some 已经执行: 1
someFunction(); // some 已经执行: 2
otherFunction(); // other 已经执行: 1
console.count(); // default: 1
console.count(); // default: 2

Sans paramètres, c'est la valeur par défaut, sinon le nombre d'exécutions de la chaîne sera sorti, ce qui est assez pratique à observer

Bien sûr, en plus d'afficher le nombre de fois, si vous souhaitez également obtenir un nombre pur de fois, vous pouvez envelopper la fonction avec un décorateur et utiliser l'objet en interne pour stocker le nombre d'appels

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 1
someFunction(); // count 2
someFunction(); // count 3
someFunction(); // count 4
console.log(someFunction.callTimes); // 4
otherFunction = getFunCallTimes(otherFunction);
otherFunction(); // count 1
console.log(otherFunction.callTimes); // 1
otherFunction(); // count 2
console.log(otherFunction.callTimes); // 2

Comment contrôler l'appel de la fonction Le nombre de fois

peut également être contrôlé via des fermetures

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(); // 1
fun(); // 1
fun(); // 1
fun(); // 2
fun(); // 2

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer