Comme dit à plusieurs reprises, il est considéré comme une mauvaise pratique d'utiliser la Fonction de constructeur (voir aussi la Spécification du Langage ECMAScript, 5ème édition, § 15.3.2.1):
new Function ([arg1[, arg2[, … argN]],] functionBody)
(où tous les arguments sont des chaînes de caractères contenant les noms d'argument et le dernier (ou le seul) chaîne de caractères contient le corps de la fonction).
Pour récapituler, on dit que c'est lent, comme l'a expliqué l'équipe Opera:
Chaque fois [...] l'
Function
le constructeur est appelé sur une chaîne représentant le code source, le script le moteur doit démarrer la machine qui convertit le code source à l'exécutable code. C'est généralement coûteux pour la performance facilement une centaine de fois plus cher qu'une simple fonction l'appel, par exemple. (Marque "Tarquin' Wilton-Jones)
Si ce n'est pas que mauvais, en fonction de ce post sur MCM (je n'ai pas testé moi-même à l'aide de la version actuelle de Firefox, tout de même).
Crockford ajoute que
[t]il, citant les conventions de l' la langue, il est très difficile de exprimer correctement un corps de la fonction en tant que chaîne de caractères. Dans la forme d'une chaîne, au début de la vérification d'erreur ne peut pas être fait. [...] Et c'est un gaspillage de mémoire, parce que chaque la fonction exige de ses propres indépendant la mise en œuvre.
Une autre différence est que
une fonction définie par une Fonction constructeur de ne pas hériter de toute la portée autre que la portée globale (qui tous fonctions hériter). (MDC)
En dehors de cela, vous devez être attentif afin d'éviter l'injection de code malveillant, lorsque vous créez un new Function
à l'aide du contenu dynamique.
Cela dit, T. J. Crowder dit dans une réponse que
[t]voici presque jamais besoin de le semblable [...] la nouvelle Fonction(...), soit, encore une fois, sauf pour les quelques avancées des cas limites.
Alors, maintenant, je me demande: quels sont ces "pointe de cas"? Sont là utilisations légitimes de la Fonction constructeur?