From 844f5103992238c0c23203286dad16a466e89c97 Mon Sep 17 00:00:00 2001 From: julieng Date: Tue, 3 Aug 2021 08:03:09 +0200 Subject: move *.html to *.md --- .../reference/global_objects/function/index.md | 150 +++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 files/fr/web/javascript/reference/global_objects/function/index.md (limited to 'files/fr/web/javascript/reference/global_objects/function/index.md') diff --git a/files/fr/web/javascript/reference/global_objects/function/index.md b/files/fr/web/javascript/reference/global_objects/function/index.md new file mode 100644 index 0000000000..cbac58bc3c --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/function/index.md @@ -0,0 +1,150 @@ +--- +title: Function +slug: Web/JavaScript/Reference/Global_Objects/Function +tags: + - Constructor + - Function + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Function +original_slug: Web/JavaScript/Reference/Objets_globaux/Function +--- +
{{JSRef}}
+ +

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

+ +

Appeler ce constructeur permet de créer des fonctions dynamiquement mais cette méthode souffre de défauts équivalents à {{jsxref("eval")}} en termes de sécurité et de performance. Toutefois, à la différence d'eval, le constructeur Function permet d'exécuter du code dans la portée globale.

+ +
{{EmbedInteractiveExample("pages/js/function-constructor.html")}}
+ +

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 {{jsxref("Opérateurs/L_opérateur_function","expression de fonction","",1)}} ou à une instruction {{jsxref("Instructions/function","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. Si un argument n'est pas passé, la valeur du paramètre dans la fonction sera {{jsxref("undefined")}}.

+ +

Appeler le constructeur Function comme une fonction (c'est-à-dire sans utiliser l'opérateur {{jsxref("Opérateurs/L_opérateur_new","new")}}) a le même effet que quand il est appelé comme constructeur.

+ +

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 {{jsxref("Function.prototype")}} grâce à la chaîne de prototype.

+ +

Le prototype de Function

+ +

Propriétés

+ +
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Function/prototype', 'Propri.C3.A9t.C3.A9s')}}
+ +

Méthodes

+ +
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Function/prototype', 'M.C3.A9thodes')}}
+ +

Les instances de Function

+ +

Les instances de Function héritent des méthodes et propriétés de {{jsxref("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 {{jsxref("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 {{jsxref("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
+ +

Bien que ce code fonctionne dans un navigateur web, l'appel à f1() provoquera une {{jsxref("ReferenceError")}} dans Node.js car x ne sera pas trouvé. En effet, pour Node, la portée de plus haut niveau n'est pas la portée globale et x est ici local à la fonction.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.3', 'Function')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-function-objects', 'Function')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-function-objects', 'Function')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Function")}}

+ +

Voir aussi

+ + -- cgit v1.2.3-54-g00ecf