La fonction est le concept le plus utilisé en JavaScript. La fonction dans JavaScript est la fonction la plus simple à commencer, mais c'est aussi le concept le plus difficile à comprendre et à maîtriser en JavaScript.
1. Le type de fonction est l'un des types de référence dans JS. Chaque fonction est en fait un objet d'instance de type de fonction, avec ses propres propriétés et méthodes. En raison de l'objet fonctionnel, le nom de la fonction est en fait un pointeur vers l'objet fonction.
2. Méthodes de définition de fonction couramment utilisées
1. Déclaration de fonction:
Sum de fonction (a, b) {return a + b;}2. Expression:
var sum = function () {return a + b; }; // Notez le semi-colon // la différence entre les deux méthodes: // L'interprète sera le premier à lire la déclaration de fonction et à le rendre accessible avant l'exécution. Lorsque vous utilisez une expression, vous devez attendre que l'analyseur s'exécute à la ligne de code où il est situé avant qu'il ne soit interprété et exécuté (la déclaration variable est avancée, tandis que la valeur est laissée en place) alerte (somme (10, 10)); Fonction Sum (a, b) {return a + b;} // ↑ Le code ci-dessus sera exécuté normalement, car avant l'exécution du code, l'analyseur sera promu via la déclaration de fonction, lisez et ajoutez la déclaration de la fonction à l'environnement d'exécution et la mettra en haut de l'alerte d'arborescence de code (typeof SUM); alerte (somme (10, 10)); var sum = function (a ,b){ return a+b;}//↑The reason is that the function is located in an initialization statement, not a function declaration, and will not be advanced, but will only advance the var sum, and use the typeof operator to show that sum is undefined, so the error is reported3. Le nom de fonction contient uniquement un pointeur vers un objet de fonction, donc le nom de fonction n'est pas différent des autres variables contenant le pointeur d'objet, c'est-à-dire qu'un objet de fonction peut avoir plusieurs noms:
fonction sum (a, b) {return a + b;} console.log (sum (2, 3)); // 5var anothersum = sum; // variable anothersum pointe également la même console d'objet de fonction.log (anothersum (4, 5)); // 9sum = null; // La variable de somme n'enregistre plus les pointeurs vers la console d'objet de fonction.log (anothersum (1, 3)); // la variable anothersum peut toujours être appelée4. Pourquoi JS ne surcharge pas le concept.
fonction add (a) {return a + 3;} fonction add (a) {return a + 5;} var result = add (3); // 8 // Les deux fonctions ont le même nom, et le résultat ne peut être que cette dernière fonction écrase la précédente, il ne peut donc pas être rechargé5. Propriétés internes d'une fonction: à l'intérieur de la fonction, il y a deux objets spéciaux, des arguments et ce
1. Arguments:
Les arguments sont un objet de tableau de la classe, contenant tous les paramètres de la fonction entrante. Cet objet a un attribut appelé Callee. La valeur de la propriété est un pointeur, pointant vers la fonction elle-même qui possède l'objet d'arguments.
fonction foo () {var a = arguments.callee; return a.toString ();} foo (); / * return le résultat: "fonction sum () {var a = arguments.callee; return a.toString ();}" c'est-à-dire à l'intérieur d'une fonction, arguments.Callee fait référence à la fonction elle-même. Cette fonction est quelque peu utile lorsqu'elle est appelée récursivement, a de nombreux défauts et est supprimé en mode strict ES5 * /2. Ceci: tout simplement, cela fait référence à l'objet environnement dans lequel la fonction est exécutée. Cela fait référence à l'objet dans lequel l'objet est exécuté. C'est assez compliqué de se développer, juste un article
//FAIRE:
3. ES5 spécifie une autre propriété d'une fonction: appelant. Cette propriété de fonction fait référence à la fonction qui appelle la fonction actuelle.
function inner () {console.log (inner.Caller);} fonction outer () {inner ();} outer (); // fonction exter () {inner ();}4. Attribut de longueur: indique le nombre de paramètres que la fonction veut accepter
fonction add (a, b, c) {return a + b + c;} add.length; // 35. Le célèbre prototype d'attribut, tout simplement, est un objet, un objet créé en appelant un constructeur, contenant des propriétés et des méthodes qui peuvent être partagées par toutes les instances d'un type spécifique. C'est assez compliqué de se développer, juste un article
//FAIRE:
6. Deux méthodes de la fonction: call () et appliquer (). Ils appellent tous deux la fonction dans une portée spécifique, et en fait ils sont définis cette valeur à l'intérieur de la fonction.
1. Call (): Similaire à la méthode Apply (), la différence est que la méthode de réception des paramètres est différente et que les paramètres doivent être répertoriés un par un.
2. Appliquer (): reçoit deux paramètres, l'un est la portée de l'opération de fonction, et l'autre est un tableau de paramètres, qui peut être un tableau ou un objet de tableau de la classe d'arguments.
fonction sum (a, b) {return a + b;} function appenum (a, b) {return sum.Apply (this, arguments);} // le deuxième paramètre est un objet d'arrivée argumentation. // 5 console.log (CALSUM1 (3, 5)); // 83. Passer des paramètres et des fonctions d'appel n'est pas l'endroit où l'appel () et appliquer () sont utilisés. La chose réelle puissante à propos du fonctionnement de la fonction d'extension est la portée de
var color = 'red'; var obj = {couleur: 'blue'} fonction foo () {console.log (this.color); } foo (); //'re'foo.Call (This) ;//'re'foo.Call(OBJ); // 'bleu' // L'environnement d'exécution du dernier appel à la fonction foo () a changé, et cela pointe vers l'objet OBJ, il est donc «bleu»Le plus grand avantage de l'utilisation d'appel () et d'application () pour étendre la portée est de découpler les objets et les méthodes
4. ES5 définit une nouvelle méthode: bind (), qui renvoie une fonction, dans laquelle cette valeur sera liée à la valeur transmise pour bind ().
var x = 9; var module = {x: 81, getx: function () {return this.x; }}; module.getx (); // 81VAR RETREVEX = module.getX; RetrieveX (); // 9, car dans ce cas, "ce" pointe vers la variable globale var boundgetx = rétrivex.bind (module); // le liez dans la fonction rétriex () au module pour toujours, puis appelez cette fonction pour toujours exécuter BoundGetX () dans l'objet module; // 81Ce qui précède est une analyse approfondie des types de fonctions dans JavaScript introduits par l'éditeur. J'espère que cela vous sera utile. Si vous voulez en savoir plus, veuillez faire attention à wulin.com.