Une fonction est un conteneur d'instructions de code pouvant être invoquées à l'aide des parenthèses. ()
opérateur. Des paramètres peuvent être passés à l'intérieur des parenthèses lors de l'appel afin que les instructions de la fonction puissent accéder à certaines valeurs lorsque la fonction est appelée..
Dans le code suivant, nous créons deux versions d’un addNumbers
fonction objectone en utilisant le Nouveau
opérateur et un autre utilisant le modèle littéral plus commun. Les deux attendent deux paramètres. Dans chaque cas, nous appelons la fonction en passant des paramètres entre parenthèses ()
opérateur.
Échantillon: sample76.html
Une fonction peut être utilisée pour renvoyer une valeur, construire un objet ou comme mécanisme pour exécuter simplement du code. JavaScript a plusieurs utilisations pour les fonctions, mais dans sa forme la plus élémentaire, une fonction est simplement une étendue unique d'instructions exécutables.
Une fonction()
Paramètresle Une fonction()
constructeur prend un nombre indéterminé de paramètres, mais le dernier paramètre attendu par le Une fonction()
constructeur est une chaîne contenant des instructions qui composent le corps de la fonction. Tous les paramètres passés au constructeur avant le dernier seront disponibles pour la fonction en cours de création. Il est également possible d'envoyer plusieurs paramètres sous forme de chaîne séparée par des virgules.
Dans le code suivant, je compare l'utilisation de la Une fonction()
constructeur avec les modèles les plus courants d'instanciation d'un objet de fonction.
Échantillon: sample77.html
Tirant directement parti de la Une fonction()
constructeur n'est pas recommandé ou généralement jamais fait car JavaScript utilisera eval ()
pour analyser la chaîne contenant la logique des fonctions. Beaucoup considèrent eval ()
être inutile frais généraux. Si elle est utilisée, une faille dans la conception du code est hautement possible.
En utilisant le Une fonction()
constructeur sans le Nouveau
mot-clé a le même effet que si vous utilisez uniquement le constructeur pour créer des objets fonction (nouvelle fonction ('x', 'return x')
contre. fonction (('x', 'retour x')
).
Aucune fermeture n'est créée lors de l'appel de la Une fonction()
constructeur directement.
Une fonction()
Propriétés et méthodesL'objet fonction a les propriétés suivantes (sans compter les propriétés et méthodes héritées):
Propriétés (Function.prototype;
):
prototype
Les instances d'objet de fonction ont les propriétés et les méthodes suivantes (à l'exception des propriétés et des méthodes héritées):
Propriétés d'instance (var myFunction = fonction (x, y, z) ;
myFunction.length;
):
arguments
constructeur
longueur
Méthodes d'instance (var myFunction = fonction (x, y, z) ;
myFunction.toString ();
):
appliquer()
appel()
toString ()
Bien qu'il soit possible de créer une fonction simplement pour exécuter des instructions de code, il est également très courant qu'une fonction renvoie une valeur. Dans l'exemple suivant, nous renvoyons une chaîne à partir du dis salut
une fonction.
Échantillon: sample78.html
Si une fonction ne spécifie pas de valeur de retour, indéfini
est retourné. Dans l'exemple suivant, nous appelons le japper
fonction qui enregistre la chaîne 'yelp' dans la console sans renvoyer explicitement de valeur.
Échantillon: sample79.html
Le concept à retenir ici est que toutes les fonctions renvoient une valeur, même si vous ne fournissez pas explicitement une valeur à renvoyer. Si vous ne spécifiez pas de valeur à renvoyer, la valeur renvoyée est indéfini
.
En JavaScript, les fonctions sont des objets. Cela signifie qu'une fonction peut être stockée dans une variable, un tableau ou un objet. En outre, une fonction peut être transmise à une fonction et renvoyée à celle-ci. Une fonction a des propriétés car c'est un objet. Tous ces facteurs rendent les fonctions de première classe des citoyens en JavaScript.
Échantillon: sample80.html
Il est crucial que vous réalisiez qu'une fonction est un objet et donc une valeur. Il peut être passé ou augmenté comme n'importe quelle autre expression en JavaScript.
Les paramètres sont des véhicules permettant de passer des valeurs dans la portée d'une fonction lorsqu'elle est appelée. Dans l'exemple suivant, nous appelons addFunction ()
. Comme nous l'avons prédéfini pour prendre deux paramètres, deux valeurs ajoutées deviennent disponibles dans son champ d'application..
Échantillon: sample81.html
Contrairement à certains autres langages de programmation, il est parfaitement légal en JavaScript d'omettre des paramètres même si la fonction a été définie pour accepter ces arguments. Les paramètres manquants reçoivent simplement la valeur indéfini
. Bien sûr, en omettant des valeurs pour les paramètres, la fonction peut ne pas fonctionner correctement.
Si vous transmettez des paramètres inattendus à une fonction (ceux qui n'étaient pas définis lors de la création de la fonction), aucune erreur ne se produira. Et il est possible d'accéder à ces paramètres à partir du arguments
objet, disponible pour toutes les fonctions.
ce
et arguments
Les valeurs sont disponibles pour toutes les fonctionsDans le champ et le corps de toutes les fonctions, le ce
et arguments
les valeurs sont disponibles.
le arguments
objet est un objet de type tableau contenant tous les paramètres transmis à la fonction. Dans le code suivant, même si nous ne spécifions pas les paramètres lors de la définition de la fonction, nous pouvons nous fier à la arguments
tableau passé à la fonction pour accéder aux paramètres s'ils sont envoyés lors de l'appel.
Échantillon: sample82.html
le ce
mot-clé, passé à toutes les fonctions, est une référence à l'objet qui contient la fonction. Comme on pouvait s'y attendre, les fonctions contenues dans des objets en tant que propriétés (méthodes) peuvent utiliser ce
pour obtenir une référence à l'objet parent. Lorsqu'une fonction est définie dans la portée globale, la valeur de ce
est l'objet global. Passez en revue le code suivant et assurez-vous de bien comprendre ce
est de retour.
Échantillon: sample83.html
arguments.callee
Propriétéle arguments
l'objet a une propriété appelée appelé
, qui est une référence à la fonction en cours d'exécution. Cette propriété peut être utilisée pour référencer la fonction à partir de la portée de la fonction (arguments.callee
) une référence à soi. Dans le code suivant, nous utilisons cette propriété pour obtenir une référence à la fonction appelante..
Échantillon: sample84.html
Cela peut être utile quand une fonction doit être appelée de manière récursive.
longueur
Propriété et arguments.length
le arguments
objet a un unique longueur
propriété. Bien que vous pensiez peut-être que cette propriété de longueur vous donnera le nombre d'arguments définis, elle indique en réalité le nombre de paramètres envoyés à la fonction lors de l'appel..
Échantillon: sample85.html
En utilisant le longueur
propriété de tous Une fonction()
cas, nous pouvons réellement saisir le nombre total de paramètres que la fonction attend.
Échantillon: sample86.html
le arguments.length
obsolète dans JavaScript 1.4, mais le nombre d’arguments envoyés à une fonction est accessible à partir du longueur
propriété de l'objet fonction. En allant de l'avant, vous pouvez obtenir la valeur de la longueur en tirant parti des appelé
propriété pour obtenir d’abord une référence à la fonction invoquée (arguments.callee.length
).
Les paramètres d’une fonction peuvent être redéfinis dans la fonction soit directement, soit en utilisant le arguments
tableau. Jetez un oeil à ce code:
Échantillon: sample87.html
Notez que je peux redéfinir la valeur du paramètre bar en utilisant le arguments
index ou en réaffectant directement une nouvelle valeur au paramètre.
Les fonctions peuvent être annulées à tout moment pendant l'appel en utilisant le revenir
mot clé avec ou sans valeur. Dans l'exemple suivant, nous annulons la ajouter
fonction si les paramètres sont indéfinis ou pas un nombre.
Échantillon: sample88.html
Le concept à retenir ici est que vous pouvez annuler l'exécution d'une fonction en utilisant le revenir
mot-clé à n'importe quel moment de l'exécution de la fonction.
Une fonction peut être définie de trois manières différentes: un constructeur de fonction, une instruction de fonction ou une expression de fonction. Dans l'exemple suivant, je démontre chaque variante.
Échantillon: sample89.html
Certains ont dit qu'il existe un quatrième type de définition pour les fonctions, appelé "expression de fonction nommée". Une expression de fonction nommée est simplement une expression de fonction qui contient également un nom (par exemple,., var add = fonction add (x, y) retour x + y
).
appel()
et appliquer()
)Les fonctions sont appelées à l'aide de quatre scénarios ou modèles différents.
appliquer()
ou appel()
Dans l'exemple suivant, nous examinons chacun de ces modèles d'invocation..
Échantillon: sample90.html
Assurez-vous de connaître les quatre modèles d'appel, car le code que vous rencontrerez peut en contenir..
Une fonction anonyme est une fonction à laquelle aucun identifiant n'est attribué. Les fonctions anonymes sont principalement utilisées pour passer des fonctions en tant que paramètre à une autre fonction.
Échantillon: sample91.html
Une expression de fonction (vraiment toute fonction sauf une créée à partir de la Une fonction()
constructeur) peut être immédiatement appelé après la définition à l’aide de l’opérateur parenthèses. Dans l'exemple suivant, nous créons un sayWord ()
expression de la fonction, puis appelle immédiatement la fonction. Ceci est considéré comme une fonction auto-invoquante.
Échantillon: sample92.html
Il est possible de créer une instruction de fonction anonyme auto-invoquée. C'est ce qu'on appelle une fonction anonyme invocante. Dans l'exemple suivant, nous créons plusieurs fonctions anonymes qui sont immédiatement appelées..
Échantillon: sample93.html
Selon le standard ECMAScript, les parenthèses entourant la fonction (ou tout ce qui transforme la fonction en expression) sont obligatoires si la fonction doit être appelée immédiatement..
Les fonctions peuvent être imbriquées indéfiniment dans d'autres fonctions. Dans l'exemple de code suivant, nous encapsulons le goo
fonctionner à l'intérieur du bar
fonction, qui est à l'intérieur de la foo
une fonction.
Échantillon: sample94.html
Le concept simple est que les fonctions peuvent être imbriquées et qu'il n'y a pas de limite à la profondeur d'imbrication..
Rappelez-vous, la valeur de ce
pour les fonctions imbriquées sera l’objet de tête (le la fenêtre
objet dans un navigateur Web) en JavaScript 1.5, ECMA-262, édition 3.
Comme mentionné précédemment, les fonctions sont des citoyens de première classe en JavaScript. Et puisqu’une fonction est une valeur et qu’une fonction peut être transmise à tout type de valeur, une fonction peut être transmise à une fonction. Les fonctions qui prennent et / ou retournent d'autres fonctions sont parfois appelées "fonctions d'ordre supérieur"..
Dans le code suivant, nous passons une fonction anonyme à la commande foo
fonction que nous revenons ensuite immédiatement de la foo
une fonction. C’est cette fonction anonyme que la variable bar
pointe vers, puisque foo
accepte et retourne ensuite la fonction anonyme.
Échantillon: sample95.html
Donc quand bar
est appelé, il appelle la fonction anonyme qui a été transmise au foo ()
fonction, qui est ensuite renvoyée de la foo ()
fonction et référencée depuis le bar
variable. Tout cela pour montrer que des fonctions peuvent être transmises comme n'importe quelle autre valeur.
Une instruction de fonction peut être appelée pendant l'exécution avant sa définition réelle. C'est un peu étrange, mais vous devriez en être conscient pour pouvoir en tirer parti, ou au moins savoir ce qui se passe quand vous le rencontrez. Dans l'exemple suivant, j'appelle le sayYo ()
et somme()
instructions de fonction avant qu'elles ne soient définies.
Échantillon: sample96.html
Cela est dû au fait qu'avant l'exécution du code, les instructions de fonction sont interprétées et ajoutées à la pile / au contexte d'exécution. Assurez-vous que vous en êtes conscient lorsque vous utilisez des instructions de fonction.
Les fonctions définies comme expressions de fonction ne sont pas levées. Seules les instructions de fonction sont levées.
Il est parfaitement légitime qu'une fonction s'appelle elle-même. En fait, cela est souvent utilisé dans des modèles de codage bien connus. Dans le code qui suit, nous lançons la countDownFrom
fonction, qui s’appelle ensuite par le nom de la fonction countDownFrom
. Cela crée essentiellement une boucle qui compte à rebours de 5 à 0.
Échantillon: sample97.html
Vous devez savoir qu’il est naturel pour une fonction de s’appeler elle-même (ou récursion) de manière répétitive..
Les fonctions sont l’un des aspects les plus utilisés de JavaScript. Nous espérons que vous comprendrez mieux maintenant comment les utiliser..