« Programmation JavaScript/Variables » : différence entre les versions

Contenu supprimé Contenu ajouté
Touffy (discussion | contributions)
m →‎object : ptite faute de frappe
Touffy (discussion | contributions)
Ligne 246 :
 
=== function ===
<pre>
f = function(){alert("Je n'ai pas de nom, mais je suis une fonction")}
f(); // Constitue l'appel de la fonction f()
alert(typeof f); // Affiche "function"
</pre>
note : 20/01/2006 : Ce paragraphe est à creuser...
 
La différence essentielle entre une variable de type function et une variable de type object, est qu'on peut appeler une fonction. Dans les deux sens du terme :
* une fonction peut être ''nommée'', par un identifiant autre que le nom de la variable qui la référence
* une fonction peut être ''invoquée''
 
Attention : ne pas confondre le type de variable ("object", "function") avec les constructeurs homonymes ([[../Object|Object]], [[../Function|Function]]). Une variable de type "object" peut avoir n'importe quel constructeur sauf Function et bien des comportements différents, tous différents du comportement d'une fonction. Mais cette section est uniquement consacrée au '''type''' "function".
 
Contrairement aux autres types, le type "function" n'a pas de valeur spéciale (telle que '''NaN''' pour "number" ou '''null''' pour "object"). Il n'y a aucun moyen de convertir directement un autre type en fonction.
 
Une fonction est créée par l'expression littérale (exemple ci-dessous) ou bien par le constructeur Function.
<source lang="javascript">
function fibonacci( n )
{
if(isNaN(n) || n<0)
return undefined
 
n=Math.floor(n)
var u = 1, v = 0
 
while(n--)
u = v + (v = u)
 
return v
}
</source>
 
Cette déclaration crée une variable "fibonacci" qui référence la fonction, mais c'est est aussi une opération qui retourne la référence de la fonction, que l'on peut ainsi affecter à une autre variable. Il est d'ailleurs possible de déclarer une fonction anonyme. De plus, toute nouvelle fonction reçoit automatiquement une propriété '''prototype''' identique au prototype de la fonction Object.
 
L'appel se fait en ouvrant et fermant une paire de parenthèses juste après une expression dont la valeur est de type "function". Cette expression n'est pas obligatoirement le nom d'une fonction, ni même un identifiant. Cette signification des parenthèses est prioritaire sur la signification générale (forcer une expression à être évaluée avant celles qui l'entourent).
 
<source lang="javascript">
f = fibonacci
delete fibonacci // efface seulement la variable, pas la fonction, qui est toujours référencée par f
x = f(10); // Constitue l'appel de la fonction f()fibonacci, en lui passant un argument
alert(f) // affiche le code de la fonction, y compris le nom donné dans sa déclaration, "fibonacci"
</source>
 
Les opérateurs et méthodes qui acceptent des objets comme opérande ou argument fonctionnent pareil avec des fonctions, notamment le point pour accéder aux propriétés de la fonction.
L'opérateur [[../Opérateurs#Instanciation (new)|new]] n'accepte que des fonctions comme opérande.
 
Par défaut, la conversion d'une fonction en chaîne retourne le code source de la fonction, ''préalablement reformaté par l'interpréteur JavaScript'' : les point-virgules, sauts de ligne et indentations seront normalisés.
 
[[Programmation JavaScript/Opérateurs|Opérateurs >>]]