Implémentation d'une fonction JavaScript à usage unique
En JavaScript, il est parfois souhaitable de créer une fonction qui ne peut être exécutée qu'une seule fois. Alors que les variables statiques peuvent y parvenir dans des langages comme C et Java, JavaScript offre des solutions plus élégantes.
Implémentation basée sur la fermeture
Une fermeture, qui encapsule une variable dans un fonction, peut empêcher efficacement qu’une fonction soit exécutée plusieurs fois. L'extrait de code suivant illustre cette approche :
<code class="javascript">var something = (function() { var executed = false; return function() { if (!executed) { executed = true; // Execute the desired actions } }; })();</code>
En appelant quelque chose(), la fonction sera invoquée une fois et définira l'indicateur exécuté sur true. Les appels ultérieurs à la fonction n'auront aucun effet puisque exécuté est déjà vrai.
Fonction utilitaire Once()
De nombreuses bibliothèques JavaScript, telles que Underscore et Ramda, fournissent un fonction utilitaire once() qui sert à cet effet. Le code suivant montre comment utiliser la fonction once() de Lodash :
<code class="javascript">import { once } from "lodash"; function something() { // Execute actions } const one_something = once(something); one_something(); // Executes something one_something(); // No effect</code>
Fonction personnalisée Once()
Si vous n'utilisez pas de bibliothèque, vous pouvez facilement implémentez votre propre fonction once() :
<code class="javascript">function once(fn, context) { var result; return function() { if (fn) { result = fn.apply(context || this, arguments); fn = null; } return result; }; }</code>
Cette fonction encapsule la fonction donnée fn et garantit qu'elle n'est appelée qu'une seule fois, en mettant en cache la valeur renvoyée pour les appels suivants.
En tirant parti des fermetures ou fonctions utilitaires, vous pouvez créer des fonctions JavaScript qui ne s'exécutent qu'une seule fois, offrant ainsi une approche pratique et polyvalente pour divers cas d'utilisation.
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!