Argumente Definition
Alle Funktionen haben ihre eigenen Argumente, die die tatsächlich empfangenen Parameter speichern, ohne sich auf die Parameterliste zu beschränken, die beim Defizieren der Funktion definiert ist. Es ist kein Array, sondern ähnlich wie bei einem Array. Es hat die gleichen Zugriffseigenschaften und -methoden wie ein Array. Es kann auf die Werte des entsprechenden einzelnen Parameters durch Argumente [n] zugreifen und die Array -Länge -Attributlänge haben. Es gibt jedoch einige Methoden, die keine Arrays haben. Sie können Argumente durch Anruf in echte Arrays konvertieren und dann Array -Operationen ausführen.
var args = array.prototype.slice.call (Argumente);
Klassenarray
1. Bestimmen Sie, ob Argumente ein Array sind
ALERT (Argumente Instanz von Array); ALERT (Argumente Instanz des Objekts);
2. wie man strikt feststellt, dass ein Daten eine Instanz einer Array (Array) -Klasse ist
Funktion isArray (value) {if (typeof array.isArray === "Funktion") {return array.isArray (value); } else {return object.prototype.toString.call (value) === "[Objektarray]"; }}3.. Konvertieren Sie Argumente in ein Array
Methode 1: Eingebaute Typen finden Sie durch Prototypen. Array.Prototype.slice ist die integrierte Methode, um auf Array zuzugreifen. Geben Sie ein Array durch die Slice -Methode zurück. Aufruf ist eine Methode, die ein Objekt aufruft und das aktuelle Objekt durch ein anderes Objekt ersetzt.
var arg = array.prototype.slice.call (Argumente, 0);
Methode 2: Die Leistung ist schlechter als Methode 1, da sie zuerst ein Array erzeugt und dann fortgesetzt wird.
var arg = [] .slice.call (Argumente, 0);
Methode 3: Durch die Schleife in ein Array konvertieren
Funktion totarray (Argumente) {var a = []; für (var i = 0; i <argumente.length; i ++) {a.unshift (Argumente. [i]); } return a;}Anrufer
Wenn eine Funktion von einer anderen Funktion aufgerufen wird, generiert die aufgerufene Funktion automatisch ein Anruferattribut, wodurch auf das Funktionsobjekt verweist, das es aufruft. Wenn die Funktion nicht aufgerufen wird, ist der Anrufer null.
function testcaller () {var caller = testcaller.caller; alert (Anrufer);} function acaller () {TestCaller ();} acaller ();Was auftaucht, ist der Inhalt der Funktion Acaller.
Argumente.Callee
Argumente.Callee zeigt auf die Lauffunktion selbst und gibt das zu verwendende Funktionsobjekt zurück, dh den Körper des angegebenen Funktionsobjekts.
Hinweis: Argumente.Length ist die Länge des tatsächlichen Parameters, Argumente.
Erhalten Sie die tatsächlichen Parameter der Funktion durch Argumente und erhalten Sie die formalen Parameter der Funktion durch Argumente.callee.
Es wird auch in Verschlüssen weit verbreitet.
var i = 0; Funktion b (num) {if (num <10) {num ++; i ++; // Wenn es Parameter gibt, sollte Callee auch die Parameter bringen. Argumente.Callee (num); } else {// Ausgabe 2 alert ("The Call"+i+"Callee!"); }} b (8); Die Anwendung von Argumenten.Callee in Verschlüssen bietet eine Funktion des rekursiven Aufrufs. // Argumente verwenden. x * argumente.callee (x - 1): 1} (10); // Ausgabe 6 Alarm (c (3)); // Ausgabe 3628800 Alert (C (10));Beispiel: Callee findet die Summe von 1-n
Funktion fn (n) {if (n == 1) return n; sonst return n+argumente.callee (n-1);}Es ermöglicht eine anonyme Funktion, sich selbst aufzurufen
Beispiel:
Funktionsliste (Typ) {var result = "<"+type+"l> <li>"; var args = array.prototype.slice.call (Argumente, 1); Ergebnis += args.join ("</li> <li>"); Ergebnis+= "</li> </"+Typ+"l>"; Rückgabeergebnis;} var listhtml = list ("o", "eins", "zwei"); console.log (listhtml);Beispiel 2: Interviewfrage: Was ist die folgende Konsole.log -Ergebnis [1,2,3,4]?
Funktion foo (x) {console.log (Argumente); return x;} foo (1,2,3,4); Funktion foo (x) {console.log (Argumente); Rückgabe x;} (1,2,3,4)Während der Voraussetzung die Funktion fn () {} (1); wird getrennt verarbeitet und in zwei Funktionen unterteilt, die erste ist Funktion fn () {} und die zweite ist eine anonyme Funktion: (1). Wenn der zweite keine Parameter hat, wird ein Fehler gemeldet, die obige Funktion ist jedoch in a () enthalten, was korrekt ist.
(Funktion fn () {console.log (Argumente);} (1,2,3,4)); (Funktion foo (x) {console.log (Argumente); return x;}) (1,2,3,4) Funktion foo () {bar.apply (null, argumente);} function bar (x) {{konsole.log (logog ({{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{) (log.