Maison interface Web js tutoriel Pourquoi ne pas utiliser les fonctions anonymes JS

Pourquoi ne pas utiliser les fonctions anonymes JS

Jan 18, 2018 pm 01:13 PM
javascript Pourquoi 函数

Cet article analyse principalement les trois principales raisons de ne pas utiliser les fonctions anonymes de js. Le rôle des fonctions anonymes est d'éviter la pollution des variables globales et les conflits de noms de fonctions. Veuillez vous référer à cet article pour les trois raisons principales de js anonyme. fonctions. J'espère que vous pourrez aider tout le monde.

La forme de base d'une fonction anonyme est (function(){...})();

La première parenthèse contient le corps de la fonction, et la parenthèse suivante doit passer des paramètres à la fonction anonyme Et l'exécuter immédiatement

Le rôle des fonctions anonymes est d'éviter la pollution des variables globales et les conflits de noms de fonctions

Peu importe le moment où vous lisez le code , vous devez faire attention aux fonctions anonymes. Parfois on les appelle des lambdas, parfois des fonctions anonymes, de toute façon je pense qu'elles sont difficiles à utiliser.

Si vous ne savez pas ce qu'est une fonction anonyme, voici une citation :

Une fonction anonyme est une fonction qui est déclarée dynamiquement au moment de l'exécution. On les appelle fonctions anonymes car contrairement aux fonctions ordinaires, elles n’ont pas de nom de fonction. — Helen Emerson, Herophant.com

Les fonctions anonymes ont la forme :

function () { ... code ... }
OR
(args) => { ... code .. }
Copier après la connexion

J'essaie de faire comprendre à tout le monde aujourd'hui l'idée que les fonctions anonymes ne doivent généralement être utilisées que lorsqu'elles sont absolument nécessaire. Les fonctions anonymes ne doivent pas être privilégiées et ne doivent être utilisées que si les raisons sont connues. Lorsque vous comprendrez cette idée, votre code deviendra plus propre, plus facile à maintenir et plus facile à suivre les bogues. Commençons par trois raisons d'éviter d'utiliser des fonctions anonymes :

Lorsque vous écrivez du code, même si vous êtes doué pour taper du code, vous rencontrerez toujours des erreurs. Parfois ces erreurs sont faciles à détecter, parfois non.

Les erreurs peuvent être facilement détectées si vous savez d'où elles viennent. Pour trouver les erreurs, nous utilisons cet outil appelé stack trace. Si vous ne connaissez pas les traces de pile, Google propose une excellente introduction.

Supposons qu'il y ait maintenant un projet très simple :

function start () {
 (function middle () {
 (function end () {
  console.lg('test');
 })()
 })()
}
Copier après la connexion

Il y a une erreur très stupide dans le code ci-dessus, une faute de frappe (console.log). Dans un petit projet, cette faute d’orthographe n’est pas un gros problème. S’il s’agit d’une petite partie d’un très grand projet comportant de nombreux modules, le problème est énorme. En supposant que vous n'ayez pas commis cette erreur stupide, le nouvel ingénieur junior la validera dans la base de code avant de partir en vacances !

Maintenant, nous devons le retrouver. En utilisant notre fonction soigneusement nommée, nous obtenons la trace de pile suivante :

Merci d'avoir nommé vos fonctions, développeurs juniors ! Nous pouvons désormais facilement localiser le bug.

Mais... une fois que nous avons corrigé cela, nous avons découvert qu'il y avait un autre bug. Cette fois, il a été introduit par un développeur plus expérimenté. Cette personne connaît les lambdas
Il s'avère qu'elle tombe sur un bug et c'est notre travail de le retrouver.

Voici le code :

(function () {
 (function () {
 (function () {
  console.lg('test');
 })();
 })();
})();
Copier après la connexion

Sans surprise, ce développeur a également oublié comment épeler console.log ! C'est trop une coïncidence ! C'est dommage qu'aucun d'entre eux n'ait nommé ses fonctions.

Alors, quelle sera la sortie de la console ?

Eh bien, au moins, nous avons toujours des numéros de ligne, n'est-ce pas ? Dans cet exemple, il semble que nous ayons environ 7 lignes de code. Que se passe-t-il si nous traitons d’un gros bloc de code ? Comme dix mille lignes de code ? Que devons-nous faire si l’étendue des numéros de ligne est si grande ? S'il existe un fichier de mappage de code une fois le code plié, le rendu des numéros de ligne est-il inutile du tout ?

Je pense que la réponse à ces questions est assez simple. La réponse est : penser à ces choses rendra votre journée entière assez misérable.

Lisibilité

Hé, j'ai entendu dire que tu n'y croyais pas. Vous êtes toujours attaché à votre fonction anonyme, et le bug n'est jamais survenu. Eh bien, je dois vous présenter mes excuses de penser que votre code est parfait. Jetons un coup d'œil à cela !

Regardez les deux morceaux de code suivants :

function initiate (arguments) {
 return new Promise((resolve, reject) => {
 try {
  if (arguments) {
   return resolve(true);
  }
  return resolve(false);
 } catch (e) {
  reject(e);
 }
 });
}
initiate(true)
 .then(res => {
  if (res) {
   doSomethingElse();
  } else {
   doSomething();
  }
 ).catch(e => {
   logError(e.message);
   restartApp();
   }
 );
Copier après la connexion

C'est un exemple très inhabituel, mais je pense que vous comprenez déjà ce que je vais dire. Notre méthode renvoie une promesse, et nous utilisons cet objet/méthode de promesse pour gérer différentes réponses possibles.

Vous pensez peut-être que ces quelques morceaux de code ne sont pas difficiles à lire, mais je pense qu'ils peuvent être meilleurs !

Que se passerait-il si nous supprimions toutes les fonctions anonymes ?

function initiate (arguments) {
 return new Promise(checkForArguments);
}
function checkForArguments (resolve, reject) {
 try {
 if (arguments) {
  return resolve(true); 
 }
 return resolve(false);
 } catch (e) {
 reject(e);
 }
}
function evaluateRes (res) {
 if (res) {
 doSomethingElse();
 } else {
 doSomething();
 }
}
function handleError (e) {
 logError(e.message);
 restartApp();
}
initiate(true)
 .then(evaluateRes)
 .catch(handleError);
Copier après la connexion

D'accord, soyons clairs : cette partie du code est plus longue, mais je pense qu'elle est plus que simplement plus lisible ! Nos fonctions soigneusement nommées sont différentes des fonctions anonymes dans le sens où nous savons quelle est leur fonction dès que nous voyons leurs noms. Cela évite les obstacles lors de l’évaluation du code.

Cela permet également de clarifier la relation. Au lieu de créer une méthode, de la transmettre, puis d'exécuter la logique, dans le deuxième exemple, les arguments sont donnés à then et catch pointe simplement vers la fonction où tout se passe.

Je ne peux rien vous dire de plus pour être plus lisible. Mais peut-être que si vous n'êtes pas encore convaincu, je peux essayer un dernier argument.

Recommandations associées :

Le problème de la définition de fonctions anonymes pour les boucles de boutons dans js

Fonctions anonymes couramment utilisées

Explication détaillée de l'utilisation de la fonction anonyme js et exemples de passage de paramètres

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 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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

La production de pages H5 nécessite-t-elle une maintenance continue? La production de pages H5 nécessite-t-elle une maintenance continue? Apr 05, 2025 pm 11:27 PM

La page H5 doit être maintenue en continu, en raison de facteurs tels que les vulnérabilités du code, la compatibilité des navigateurs, l'optimisation des performances, les mises à jour de sécurité et les améliorations de l'expérience utilisateur. Des méthodes de maintenance efficaces comprennent l'établissement d'un système de test complet, à l'aide d'outils de contrôle de version, de surveiller régulièrement les performances de la page, de collecter les commentaires des utilisateurs et de formuler des plans de maintenance.

JS peut-il fonctionner sans H5? JS peut-il fonctionner sans H5? Apr 06, 2025 am 09:06 AM

JavaScript est-il disponible pour s'exécuter sans HTML5? Le moteur JavaScript lui-même peut fonctionner indépendamment. L'exécution de JavaScript dans un environnement de navigateur dépend de HTML5 car il fournit l'environnement standardisé requis pour charger et exécuter du code. Les API et les fonctionnalités fournies par HTML5 sont cruciales pour les frameworks et bibliothèques JavaScript modernes. Sans environnements HTML5, de nombreuses fonctionnalités JavaScript sont difficiles à implémenter ou ne peuvent pas être implémentées.

Pourquoi avez-vous besoin d'appeler Vue.User (VUerouter) dans le fichier index.js dans le dossier du routeur? Pourquoi avez-vous besoin d'appeler Vue.User (VUerouter) dans le fichier index.js dans le dossier du routeur? Apr 05, 2025 pm 01:03 PM

La nécessité d'enregistrer VUerouter dans le fichier index.js dans le dossier du routeur Lors du développement d'applications VUE, vous rencontrez souvent des problèmes de configuration de routage. Spécial...

Quels sont les avantages de la production de pages H5 Quels sont les avantages de la production de pages H5 Apr 05, 2025 pm 11:48 PM

Les avantages de la production de pages H5 comprennent: une expérience légère, une vitesse de chargement rapide et une amélioration de la rétention des utilisateurs. Compatibilité multiplateforme, pas besoin de s'adapter à différentes plates-formes, améliorant l'efficacité du développement. Flexibilité et mises à jour dynamiques, aucun audit requis, ce qui facilite la modification et la mise à jour du contenu. Les coûts de développement rentables et économiques que les applications natives.

Pourquoi les zones réduites pourpre dans la disposition Flex sont-elles considérées à tort «espace de débordement»? Pourquoi les zones réduites pourpre dans la disposition Flex sont-elles considérées à tort «espace de débordement»? Apr 05, 2025 pm 05:51 PM

Questions sur les zones de slash violet dans les dispositions flexibles Lorsque vous utilisez des dispositions flexibles, vous pouvez rencontrer des phénomènes déroutants, comme dans les outils du développeur (D ...

Impossible de se connecter à MySQL en tant que racine Impossible de se connecter à MySQL en tant que racine Apr 08, 2025 pm 04:54 PM

Les principales raisons pour lesquelles vous ne pouvez pas vous connecter à MySQL en tant que racines sont des problèmes d'autorisation, des erreurs de fichier de configuration, des problèmes de mot de passe incohérents, des problèmes de fichiers de socket ou une interception de pare-feu. La solution comprend: vérifiez si le paramètre Bind-Address dans le fichier de configuration est configuré correctement. Vérifiez si les autorisations de l'utilisateur racine ont été modifiées ou supprimées et réinitialisées. Vérifiez que le mot de passe est précis, y compris les cas et les caractères spéciaux. Vérifiez les paramètres et les chemins d'autorisation du fichier de socket. Vérifiez que le pare-feu bloque les connexions au serveur MySQL.

Pourquoi un élément div spécifique dans le navigateur Edge ne s'affiche-t-il pas? Comment résoudre ce problème? Pourquoi un élément div spécifique dans le navigateur Edge ne s'affiche-t-il pas? Comment résoudre ce problème? Apr 05, 2025 pm 08:21 PM

Comment résoudre le problème d'affichage causé par les feuilles de style d'agent utilisateur? Lorsque vous utilisez le navigateur Edge, un élément DIV du projet ne peut pas être affiché. Après avoir vérifié, j'ai posté ...

Pourquoi les feuilles de style personnalisées peuvent-elles prendre effet sur les pages Web locales de Safari mais pas sur les pages Baidu? Pourquoi les feuilles de style personnalisées peuvent-elles prendre effet sur les pages Web locales de Safari mais pas sur les pages Baidu? Apr 05, 2025 pm 05:15 PM

Discussion sur l'utilisation de styles de style personnalisés dans Safari aujourd'hui, nous allons discuter d'une question sur l'application de feuilles de style personnalisées pour le navigateur Safari. Novice frontal ...

See all articles