Table des matières

Syntaxe de base

Une fonction peut être créée globalement ou dans un objet.

Fonctions globales

Chaque fonction possède 0 ou plusieurs arguments optionnel, des instructions (body) et une valeur de retour optionnel.

Pour créer une nouvelle fonction globale, il suffit d'utiliser cette syntaxe

function monNomDeFonction()
{
  // instructions
}

On peut appeler cette fonction globale comme ceci: monNomDeFonction(). Puisqu'elle est globale, c'est un attribut de l'objet window et peut etre accessible à l'aide de la syntaxe window.monNomDeFonction() ou encore window['monNomDeFonction']().

On peut spécifier des noms de variable aux arguments en ajoutant les noms dans les parenthèses lors de la déclaration de la fonction.

function monNomDeFonction(nomArg1, nomArg2)
{
  // instructions
}

Tous les arguments de la fonction sont optionnels. C'est à dire que s'il ne sont pas envoyer, ils auront la valeur undefined. On peut le détecter avec un test if (monArg == undefined) {} .

Une fonction peut retourner une valeur (objet ou type primitif) avec la syntaxe return valeur.

function monNomDeFonction(nomArg1, nomArg2)
{
  return nomArg1 + nomArg2;
}

Fonction dans les objets

On peut assigner une fonction dans un objet de cette manière:

monObjet = {
  monNomDeFonction: function (nomArg1, nomArg2)
  {
    return nomArg1 + nomArg2;
  },
  maDeuxiemeFonction: function() { return 1; }
};

Création dynamique de fonctions

On peut créer des fonctions dynamiquement à l'aide du mot-clé "new". Les premiers arguments sont les paramètres et le dernier élément représente les instructions de la fonction. Tous les arguments doivent être des chaînes de caractères. Noter bien, que le nom de l'objet est Fonction avec un F majuscule.

maNouvelleFonction = new Function("a", "b" , "c", "alert(a + b + c);");
maNouvelleFonction(1,2,3);

Manipulation

Une fonction se manipule comme une variable ou un objet. On peut passer une fonction en paramètre, l'assigner à une variable, remplacer une fonction, etc.

Assignation

Exemple, pour écrire à l'écran lorsqu'on utilise la fonction alert(), on pourrait faire ceci pour remplacer la fonction originale.

window.alert = function (text) { document.write(text); }

Propriétés

La fonction possède plusieurs propriétés, donc notamment:

  • arguments: tableau qui contient les paramètres passé en arguments lors de l'appel de la fonction. Exemple: arguments[0], arguments.length;
  • length: Nombre d'argument dans la définition de la fonction (déprécié);
  • prototypes: Permet l'ajout de propriétés à la fonction;
  • et arguments.callee (déprécié), arguments.caller (déprécié), arity.
function alertArgs() {for (var i = 0; i<arguments.length; i++) { alert(arguments[i]); }} 
alertArgs("No 1", "No 2", "No 3");
alertArgs("No 1");

À l'aide de la propriété arguments (une variable locale à la fonction), on peut simuler des arguments avec des valeurs par défaut. Par exemple

/** 
 * Affiche les paramètre a, b et c
 * @param a {integer} premier paramètre, obligatoire
 * @param b {integer} deuxième paramètre, optionnel (valeur par défaut = 5)
 * @param c {chaine}  troisième paramètre, optionnel (valeur par défaut = 'test')
 */
function afficheABC(a/*, b=5, c='test'*/) {
  var b = (arguments.length > 1) ? arguments[1] : 5;
  var c = (arguments.length > 2) ? arguments[2] : 'test';
  alert("a = " + a + ", b = " + b + ", c = " + c_; 
}

Dans mon exemple, j'ai ajouté de la jsdoc et ensuite j'ai mis en commentaire les variables par défaut dans la déclaration de la fonction pour plus de clarté pour le codeur, le commentaire n'est pas lu par Javascript.