"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pouvez-vous créer des fonctions nommées au moment de l'exécution en JavaScript sans « eval » ?

Pouvez-vous créer des fonctions nommées au moment de l'exécution en JavaScript sans « eval » ?

Publié le 2024-11-15
Parcourir:235

Can You Create Runtime-Named Functions in JavaScript Without `eval`?

Fonctions nommées à l'exécution sans Eval en JavaScript

Est-il possible de créer une fonction JavaScript avec un nom déterminé au moment de l'exécution, sans utiliser d'évaluation ou de fonctionnalités non conventionnelles spécifiques au moteur ? Oui, cela est désormais possible avec ECMAScript 2015 (ES6) et au-delà.

Solution ES6 : Noms de propriété calculés

Dans ES6, une expression de fonction anonyme affectée à une propriété d'objet prend le nom de celle-ci. propriété. Cela peut être combiné avec des noms de propriétés calculés pour nommer une fonction sans nouvelle fonction ni évaluation. Par exemple :

const dynamicName = "foo"   Math.floor(Math.random() * 1000);
const obj = {
    [dynamicName]() {
        throw new Error();
    },
};
const f = obj[dynamicName];

Cela crée une fonction nommée "foo###" où ### est un nombre aléatoire de 1 à 3 chiffres.

Visibilité du nom de la fonction

La propriété name de la fonction reflétera le nom dynamique. La note de compatibilité dans l'extrait de code ci-dessus fait référence au fait qu'Edge et Safari n'affichent actuellement pas le nom dans les traces de pile.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3