Maison > interface Web > js tutoriel > le corps du texte

Explication détaillée de l'exemple de code de la fonction de chargement paresseux dans la fonction javascript

伊谢尔伦
Libérer: 2017-07-20 10:29:38
original
1389 Les gens l'ont consulté

Fonction de chargement paresseux

En raison des différences de comportement entre les navigateurs, nous incluons souvent un grand nombre d'instructions if dans la fonction pour vérifier les fonctionnalités du navigateur pour résoudre la compatibilité problèmes avec différents navigateurs. Par exemple, notre fonction la plus courante pour ajouter des événements aux nœuds dom


function addEvent(type, element, fun) {
  if (element.addEventListener) {
    element.addEventListener(type, fun, false);
  }
  else if(element.attachEvent){
    element.attachEvent('on' + type, fun);
  }
  else{
    element['on' + type] = fun;
  }
}
Copier après la connexion

Chaque fois que la fonction addEvent est appelée, elle doit exécuter les fonctionnalités prises en charge par le navigateur. vérifiez, vérifiez d'abord si la méthode addEventListener est prise en charge. Sinon, vérifiez si la méthode attachEvent est prise en charge. Si elle n'est pas encore prise en charge, utilisez la méthode de niveau dom0 pour ajouter l'événement. Ce processus doit être répété à chaque appel de la fonction addEvent. En effet, si le navigateur prend en charge l'une des méthodes, il la prendra toujours en charge et il n'est pas nécessaire de détecter d'autres branches. En d’autres termes, l’instruction if ne doit pas être exécutée à chaque fois et le code peut s’exécuter plus rapidement.

La solution est le chargement paresseux. Le soi-disant chargement paresseux signifie que la branche d'exécution de la fonction ne se produira qu'une seule fois

Il existe deux façons d'implémenter le chargement paresseux

[1] La première est lorsque la fonction est appelé , puis traitez la fonction. Lorsqu'une fonction est appelée pour la première fois, elle sera écrasée par une autre fonction qui sera exécutée de manière appropriée, afin que tout appel à la fonction d'origine n'ait pas besoin de passer par la branche d'exécution

Nous pouvons utiliser La méthode suivante utilise le chargement paresseux pour réécrire addEvent()


function addEvent(type, element, fun) {
  if (element.addEventListener) {
    addEvent = function (type, element, fun) {
      element.addEventListener(type, fun, false);
    }
  }
  else if(element.attachEvent){
    addEvent = function (type, element, fun) {
      element.attachEvent('on' + type, fun);
    }
  }
  else{
    addEvent = function (type, element, fun) {
      element['on' + type] = fun;
    }
  }
  return addEvent(type, element, fun);
}
Copier après la connexion

Dans ce chargement paresseux addEvent(), chaque branche de l'instruction if sera addEvent L'affectation de variable couvre efficacement la fonction d'origine. La dernière étape consiste à appeler la nouvelle fonction d'affectation. La prochaine fois que addEvent() sera appelée, la fonction nouvellement attribuée sera appelée directement, il n'est donc pas nécessaire d'exécuter l'instruction if

Cependant, cette méthode présente un inconvénient si le nom de la fonction change. , Il est plus difficile de modifier

[2] La seconde consiste à spécifier la fonction appropriée lors de la déclaration de la fonction. De cette façon, les performances ne seront pas perdues lorsque la fonction est appelée pour la première fois, mais un peu de performances seront perdues lorsque le code sera chargé

Ce qui suit est addEvent() réécrit selon cette idée. Le code suivant crée une fonction anonyme auto-exécutable qui passe par différentes branches pour déterminer quelle implémentation de fonction doit être utilisée


var addEvent = (function () {
  if (document.addEventListener) {
    return function (type, element, fun) {
      element.addEventListener(type, fun, false);
    }
  }
  else if (document.attachEvent) {
    return function (type, element, fun) {
      element.attachEvent('on' + type, fun);
    }
  }
  else {
    return function (type, element, fun) {
      element['on' + type] = fun;
    }
  }
})();
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal