Die Funktion ist das am häufigsten verwendete Konzept in JavaScript. Die Funktion in JavaScript ist die einfachste Funktion, um zu beginnen, aber es ist auch das schwierigste Konzept, in JavaScript zu verstehen und zu meistern.
1. Funktionstyp ist einer der Referenztypen in JS. Jede Funktion ist tatsächlich ein Instanzobjekt des Funktionstyps mit eigenen Eigenschaften und Methoden. Aufgrund des Funktionsobjekts ist der Funktionsname tatsächlich ein Zeiger auf das Funktionsobjekt.
2. häufig verwendete Funktionsdefinitionsmethoden
1. Funktionserklärung:
Funktionsumme (a, b) {return a+b;}2. Ausdruck:
var sum = function () {return a+b; }; // Beachten Sie das Semikolon // Die Differenz zwischen den beiden Methoden: // Der Interpreter ist der erste, der die Funktionserklärung liest und sie vor der Ausführung zugänglich macht. Wenn Sie einen Ausdruck verwenden, müssen Sie warten, bis der Parser in die Codezeile ausführt, in der er sich befindet, bevor er interpretiert und ausgeführt wird (die variable Deklaration wird fortgeschritten, während der Wert an Ort und Stelle bleibt) Alarm (Summe (10, 10)); Funktionsumme (a, b) {return a+b;} // ↑ Der obige Code wird normal ausgeführt, da der Parser vor der Ausführung des Codes durch Funktionserklärung beworben wird, die Funktionserklärung in die Ausführungsumgebung hinweg und hinzufügen und oben in den Code -Baum -Alarm (Typof Sum) stellt. Alarm (Summe (10, 10)); var sum = function (a, b) {return a+b;} // ↑ Der Grund dafür ist, dass sich die Funktion in einer Initialisierungsanweisung, nicht in einer Funktionserklärung befindet, und nicht fortgeschritten ist, sondern nur die VAR -Summe voranschreitet und den Typ -Offer -Operator verwendet, um nicht definiert zu werden, sodass der Fehler angegeben ist, sodass der Fehler angegeben ist3. Der Funktionsname enthält nur einen Zeiger auf ein Funktionsobjekt, sodass sich der Funktionsname nicht von anderen Variablen unterscheidet, die den Objektzeiger enthalten, dh ein Funktionsobjekt kann mehrere Namen haben:
Funktionsumme (a, b) {return a+b;} console.log (sum (2, 3)); // 5var anotherum = sum; // Variable Anothersum zeigt auch auf dieselbe Funktionsobjektkonsole.log (Anotherum (4, 5)); // 9sum = null; // Summevariable speichert keine Zeiger mehr auf die Funktionsobjektkonsole.log (Anotherum (1, 3)); // die Variable, die ein Ethernsum noch aufgerufen werden kann4. Warum überlastet JS das Konzept nicht?
Funktion add (a) {return a+3;} Funktion add (a) {return a+5;} var result = add (3); // 8 // Die beiden Funktionen haben den gleichen Namen, und das Ergebnis kann nur die letztere Funktion überschreiben, sodass es nicht neu geladen werden kann5. Interne Eigenschaften einer Funktion: In der Funktion gibt es zwei spezielle Objekte, Argumente und diese
1. Argumente:
Argumente sind ein Array -Objekt der Klasse, das alle Parameter der eingehenden Funktion enthält. Dieses Objekt hat ein Attribut namens Callee. Der Eigenschaftswert ist ein Zeiger, der auf die Funktion selbst zeigt, die das Argumenteobjekt besitzt.
Funktion foo () {var a = argumente.callee; return a.toString ();} foo ();/*Return das Ergebnis: "Funktion sum () {var a = argumente.callee; return a.toString ();}" dh innerhalb einer Funktion, Argumente. Callee bezieht sich auf die Funktion selbst. Diese Funktion ist etwas nützlich, wenn es rekursiv aufgerufen wird, viele Fehler aufweist und im ES5 -Strict -Modus*/ entfernt wird2. Dies: Einfach ausgedrückt, dies bezieht sich auf das Umgebungsobjekt, in dem die Funktion ausgeführt wird. Dies bezieht sich auf das Objekt, in dem das Objekt ausgeführt wird. Es ist ziemlich kompliziert zu erweitern, nur ein Artikel
// todo:
3. ES5 Gibt eine weitere Eigenschaft einer Funktion an: Anrufer. Diese Funktionseigenschaft bezieht sich auf die Funktion, die die aktuelle Funktion aufruft.
Funktion inner () {console.log (inner.caller);} Funktion outter () {inner ();} ober (); // Funktion outer () {inner ();}4. Längenattribut: Zeigt die Anzahl der Parameter an, die die Funktion akzeptieren möchte
Funktion add (a, b, c) {return a+b+c;} add.length; // 35. Das berühmte Prototyp -Attribut, einfach ausgedrückt, ist ein Objekt, ein Objekt, das durch Aufrufen eines Konstruktors erstellt wurde und Eigenschaften und Methoden enthält, die von allen Instanzen eines bestimmten Typs gemeinsam genutzt werden können. Es ist ziemlich kompliziert zu erweitern, nur ein Artikel
// todo:
6. Zwei Methoden der Funktion: call () und anwenden (). Beide rufen die Funktion in einem bestimmten Bereich auf und werden diesen Wert in der Funktion festlegen.
1. CALL (): Ähnlich wie bei der Methode apply () besteht die Differenz darin, dass die Methode zum Empfangen von Parametern unterschiedlich ist und die Parameter einzeln aufgeführt werden müssen.
2. anwenden (): Empfängt zwei Parameter, einer ist der Umfang der Funktionserie, und das andere ist ein Array von Parametern, die ein Array oder ein Array -Objekt der Argumenteklasse sein können.
Funktionsumme (a, b) {return a+b;} Funktion Callum (a, b) {return sum.Apply (this, argumente);} // Der zweite Parameter ist ein Argumente für Argumente für Argumente, die Argumente für Argumente von Array (a, b) {return sum. // 5 console.log (Callum1 (3, 5)); // 83. Das Übergeben von Parametern und Aufruffunktionen ist nicht der Ort, an dem Call () und anwenden () verwendet werden. Das wirklich Mächtige an der Expansionsfunktionsoperation ist der Umfang von
var color = 'rot'; var obj = {color: 'blue'} function foo () {console.log (this.color); } foo (); //'red'foo.call(this);//red'foo.call(obj); // 'Blue' // Die Ausführungsumgebung des letzten Aufrufs zur FOO () -Funktion hat sich geändert, und dies zeigt auf das OBJ -Objekt, sodass es 'blau' ist.Der größte Vorteil der Verwendung von CALL () und anwenden (), um den Umfang zu erweitern, besteht darin, Objekte und Methoden zu entkoppeln
4. ES5 definiert eine neue Methode: Bind (), die eine Funktion zurückgibt, in der dieser Wert an den Wert gebunden ist, der an Bind () -Funktion übergeben wird.
var x = 9; var module = {x: 81, getX: function () {return this.x; }}; module.getX (); // 81var retrievex = modul.getX; retrievex (); // 9, weil in diesem Fall "dies" auf die globale variable var begrenzung = retrievex.bind (modul) zeigt; // Binden Sie diese in die Funktion retrievex () für immer an das Modul und rufen Sie diese Funktion an, um stets stets im Modul -Objekt auszuführen; // 81Das obige ist eine eingehende Analyse der Funktionstypen in JavaScript, die vom Editor eingeführt wurden. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie mehr wissen möchten, achten Sie bitte wulin.com.