La déclaration function (ou l'instruction function) permet de définir une fonction et les paramètres que celle-ci utilise.

Il est également possible de définir des fonctions en utilisant le constructeur Function et une expression de fonction.

Syntaxe

function nom([param1[, param2,[..., paramN]]]) {
   [instructions]
}
nom
Le nom de la fonction.
paramN
Le nom d'un argument à passer à la fonction. Une fonction peut avoir jusqu'à 255 arguments (cela peut varier en fonction des moteurs).
instructions
Les instructions qui constituent le corps de la fonctio.

Description

Une fonction créée via une déclaration de fonction est un objet Function et possède toutes les caractéristiques (propriétés, méthodes et comportement) d'un objet Function. Voir la page Function pour plus d'informations sur ces caractéristiques.

Une fonction peut également être créée en utilisant une expression (voir les expressions de fonctions).

Par défaut, une fonction renvoie undefined. Pour renvoyer une autre valeur en résultat, une fonction doit utiliser une instruction return qui définit la valeur à retourner.

Fonctions créées conditionnellement

Il est possible de déclarer des fonctions de façon conditionnelle (c'est-à-dire qu'on peut placer une instruction de déclaration de fonction au sein d'une instruction if). La plupart des navigateurs, autres que ceux basés sur Gecko, traiteront cette déclaration conditionnelle comme si elle était inconditionnelle (que la condition souhaitée soit vérifiée ou non) (voir cet article (en anglais) pour un aperçu). Pour cette raison, les déclarations de fonctions ne devraient pas être utilisées pour créer des fonctions de façon conditionnelle. Pour ce faire, il faut privilégier les expressions de fonctions.

var remontee = "toto" in this;
console.log(`'toto' ${remontee ? "est" : "n'est pas"} remontée. typeof toto vaut ${typeof toto}`);
if (false) {
  function toto(){ return 1; }
}

// Pour Chrome: 
// 'toto' est remontée. typeof toto vaut undefined
// 
// Pour Firefox:
// 'toto' est remontée. typeof toto vaut undefined
//
// Pour Edge:
// 'toto' n'est pas remontée. typeof toto vaut undefined
// 
// Pour Safari:
// 'toto' est remontée. typeof toto vaut function

On obtient exactement les mêmes résultats si la condition est vérifiée (ici avec true) :

var remontee = "toto" in this;
console.log(`'toto' ${remontee ? "est" : "n'est pas"} remontée. typeof toto vaut ${typeof toto}`);
if (true) {
  function toto(){ return 1; }
}

// Pour Chrome: 
// 'toto' est remontée. typeof toto vaut undefined
// 
// Pour Firefox:
// 'toto' est remontée. typeof toto vaut undefined
//
// Pour Edge:
// 'toto' n'est pas remontée. typeof toto vaut undefined
// 
// Pour Safari:
// 'toto' est remontée. typeof toto vaut function

La « remontée » des déclarations de fonction

Lorsqu'on utilise une déclaration de fonction pour créer une fonction, la définition de la fonction est « remontée ». Il devient donc possible d'utiliser la fonction avant de l'avoir déclarée :

remontée(); // affiche "toto" dans la console

function remontée() {
  console.log("toto");
}

On notera que les expressions de fonctions ne sont pas remontées :

nonRemontée(); // TypeError: nonRemontée is not a function

var nonRemontée = function() {
   console.log("truc");
};

Exemples

Utiliser function

Dans l'exemple qui suit, on déclare une fonction qui renvoie le total des ventes en fonction des nombres d'unités vendues pour les produits a, b, et c.

function calc_ventes(nb_produits_a, nb_produits_b, nb_produits_c) {
   return nb_produits_a*79 + nb_produits_b * 129 + nb_produits_c * 699;
}

Spécifications

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

Compatibilité des navigateurs

Update compatibility data on GitHub
OrdinateurMobileServeur
ChromeEdgeFirefoxInternet ExplorerOperaSafariWebview AndroidChrome pour AndroidEdge MobileFirefox pour AndroidOpera pour AndroidSafari sur iOSSamsung InternetNode.js
Support simpleChrome Support complet OuiEdge Support complet OuiFirefox Support complet 1IE Support complet OuiOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
Allowed in sloppy modeChrome Support complet 49Edge ? Firefox ? IE ? Opera Support complet OuiSafari ? WebView Android ? Chrome Android ? Edge Mobile ? Firefox Android ? Opera Android ? Safari iOS ? Samsung Internet Android ? nodejs ?
Trailing comma in parametersChrome Support complet 58Edge ? Firefox Support complet 52IE ? Opera Support complet 45Safari ? WebView Android Support complet 58Chrome Android Support complet 58Edge Mobile ? Firefox Android Support complet 52Opera Android Support complet 45Safari iOS ? Samsung Internet Android Support complet 7.0nodejs Support complet 8.0.0

Légende

Support complet  
Support complet
Compatibilité inconnue  
Compatibilité inconnue

Voir aussi

Étiquettes et contributeurs liés au document

Étiquettes : 
Contributeurs à cette page : SphinxKnight, teoli
Dernière mise à jour par : SphinxKnight,