Une fonction()

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ètres

le 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éthodes

L'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

Propriétés et méthodes de l'instance d'objet de fonction

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 ()

Les fonctions retournent toujours une valeur

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.


Les fonctions sont des citoyens de première classe (pas seulement la syntaxe, mais les valeurs)

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.


Passer des paramètres à une fonction

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 fonctions

Dans 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

 

le 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.


L'instance de fonction 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).


Redéfinition des paramètres de fonction

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.


Renvoyer une fonction avant son exécution (annuler l'exécution d'une fonction)

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.


Définir une fonction (déclaration, expression ou constructeur)

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).


Invoquer une fonction (Fonction, Méthode, Constructeur ou appel() et appliquer())

Les fonctions sont appelées à l'aide de quatre scénarios ou modèles différents.

  • En tant que fonction
  • Comme méthode
  • En tant que constructeur
  • En utilisant 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..


Fonctions anonymes

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

 

Expression de fonction auto-invoquante

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

 

Déclarations de fonction anonymes invocantes

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

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.


Passage de fonctions à fonctions et renvoi de fonctions à partir de fonctions

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.


Invocation d'instructions de fonction avant qu'elles ne soient définies (aussi appelée Fonction de levage)

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.


Une fonction peut s'appeler elle-même (aka récursion)

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..


Conclusion

Les fonctions sont l’un des aspects les plus utilisés de JavaScript. Nous espérons que vous comprendrez mieux maintenant comment les utiliser..