Le constructeur Function crée un nouvel objet Function. En JavaScript, chaque fonction est un objet Function.

Syntaxe

new Function ([arg1[, arg2[, ...argN]],] corpsFonction)

Paramètres

arg1, arg2, ... argN
Les noms utilisés par la fonction pour les arguments formellement déclarés. Chacun doit être une chaîne de caractères correspondant à un identifiant JavaScript valide (ou une liste de telles chaînes séparées par des virgules). Par exemple : "x", "uneValeur", ou "a,b".
corpsFonction
Une chaîne de caractères qui contient les instructions JavaScript définissant la fonction.

Description

Les objets Function créés avec le constructeur Function sont analysés quand la fonction est créée. Ceci est moins efficace que de déclarer une fonction grâce à une expression de fonction ou à une instruction function car celles crées de cette façon sont analysées avec le reste du code.

Tous les arguments passés à la fonction seront traités avec les noms des identifiants des paramètres de la fonction à créer, dans le même ordre dans lequel ils ont été passés.

Appeler le constructeur Function comme une fonction (c'est-à-dire sans utiliser l'opérateur new) a le même effet que quand il est appelé comme constructor.

Propriétés et méthodes de Function

L'objet global Function ne possède pas de méthodes ou de propriétés propres. Cependant, il est lui-même une fonction et hérite de certaines méthodes et propriétés depuis Function.prototype grâce à la chaîne de prototype.

Le prototype de Function

Propriétés

Méthodes

Les instances de Function

Les instances de Function héritent des méthodes et propriétés de Function.prototype. Comme pour les autres constructeurs, il est possible de modifier le prototype du constructeur afin d'apporter des modifications à toutes les instances de Function.

Exemple

Définir des arguments avec le constructeur Function

Le code suivant permet de créer un objet Function qui utilise deux arguments :

// Cet exemple peut être lancé dans votre console JavaScript

// On crée un fonction qui prend deux arguments 
// et qui en renvoie la somme
var ajoute = new Function('a', 'b', 'return a + b');

// On appelle la fonction
ajoute(2, 6);
// > 8

Les arguments "a" et "b" sont les noms des arguments formellement déclarés utilisés dans le corps de la fonction : "return a + b".

Différence entre le constructeur Function et les déclarations de fonction

Les fonctions créées avec le constructeur Function() ne créent pas de fermetures liées au contexte de leur création. Ainsi, lorsqu'elles sont exécutées, elles ne peuvent accéder qu'aux variables globales et à leurs propres valeurs locales. Elles ne peuvent pas accéder aux variables de la portée dans laquelle le constructeur Function a été invoqué. Le comportement est différent de celui qu'on obtient avec eval avec du code contenant une expression de fonction.

var x = 10;

function créerFonction1() {
  var x = 20;
  return new Function("return x;"); // ici |x| fait référence au |x| global
}

function créerFonction2() {
  var x = 20;
  function f() {
    return x; // ici |x| fait référence au |x| local juste avant
  }
  return f;
}

var f1 = créerFonction1();
console.log(f1());          // 10
var f2 = créerFonction2();
console.log(f2());          // 20

Spécifications

Spécification État Commentaires
ECMAScript 1st Edition (ECMA-262) Standard Définition initiale. Implémentée avec JavaScript 1.0.
ECMAScript 5.1 (ECMA-262)
La définition de 'Function' dans cette spécification.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
La définition de 'Function' dans cette spécification.
Standard  
ECMAScript 2017 Draft (ECMA-262)
La définition de 'Function' dans cette spécification.
Projet  

Compatibilité des navigateurs

Fonctionnalité Chrome Firefox (Gecko) Internet Explorer Opera Safari
Support simple (Oui) (Oui) (Oui) (Oui) (Oui)
Fonctionnalité Android Chrome pour Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Support simple (Oui) (Oui) (Oui) (Oui) (Oui) (Oui)

Voir aussi

Étiquettes et contributeurs liés au document

 Contributeurs à cette page : SphinxKnight, darul75, teoli, tregagnon, LaBoumerde, Sheppy, rat, daniel35310
 Dernière mise à jour par : SphinxKnight,