Was passiert, wenn ich eine JS-Methode mit mehr Parametern anrufe, als für die Annahme definiert sind?

8

Ich würde gerne sowohl reguläre JS-Entwickler-Funktionen als auch vordefinierte DOM-Methoden kennen. Was passiert, wenn ich versuche, IE attachEvent mit der Signatur des WHATWG addEventListener aufzurufen? Zum Beispiel,

elem.attachEvent('onbillgates\'mom', function(e){ this.mount(); }, false);

Beachten Sie insbesondere false . Wird diese Fehlermeldung auftreten, obwohl die Signatur der attachEvent -Methode nur zwei Argumente erfordert?

Danke.

%Vor%     
wwaawaw 02.10.2012, 16:05
quelle

4 Antworten

14

JavaScript hat nicht das Konzept einer festen Parameterliste. Für Ihre eigenen Funktionen können Sie immer so viele Parameter angeben, wie Sie möchten, und beliebig viele übergeben, je nach Wunsch.

Für eingebaute Funktionen, die mit nativem Code korrelieren, kommt es auf an.

Sie haben gefragt, worauf es ankommt:

Schauen wir uns die ECMA-262 an

Abschnitt 15 über eingebaute (nicht mit Host zu verwechseln) Funktionen im Allgemeinen

  

Wenn in der Beschreibung einer bestimmten Funktion nicht anders angegeben, wenn eine Funktion oder ein Konstruktor, die in dieser Klausel beschrieben wird, weniger Argumente erhält, als die Funktion erfordert, sollte sich die Funktion oder der Konstruktor genau so verhalten, als ob sie ausreichend hinzugefügt worden wäre Argumente, wobei jedes Argument der undefinierte Wert ist.

Alles klar. Wenn ich weniger Argumente als benötigt übergebe, hängt es von der Spezifikation der Funktion ab (scrollen Sie in Abschnitt 15 nach der Spezifikation für jede integrierte Funktion).

  

Wenn in der Beschreibung einer bestimmten Funktion nicht anders angegeben, wenn eine in dieser Klausel beschriebene Funktion oder Konstruktor mehr Argumente erhält, als die Funktion angeben darf, werden die zusätzlichen Argumente vom Aufruf ausgewertet und dann von der Funktion ignoriert. Eine Implementierung kann jedoch implementierungsspezifisches Verhalten in Bezug auf solche Argumente definieren, solange das Verhalten nicht das Auslösen einer TypeError-Ausnahme ist, die lediglich auf das Vorhandensein eines zusätzlichen Arguments basiert.

Wenn zu viele Argumente übergeben werden, sollte niemals ein TypeError ausgelöst werden. Aber es kann noch andere Fehler verursachen. Auch hier hängt es von der Funktion ab, über die Sie sprechen.

Sie haben explizit über das DOM gesprochen und nicht über eingebaute Funktionen. Um ehrlich zu sein kann ich die entsprechenden Teile der Spezifikation nicht finden. Die ECMA-Spezifikation ist so viel einfacher zu lesen als die w3-Website.

    
Prinzhorn 02.10.2012, 16:12
quelle
3

Wird nicht weh tun. Sie können eine Funktion sogar mit weniger Parametern aufrufen, als sie benötigt, solange der Funktionscode mit einigen undefinierten Werten in Ordnung ist.

    
Diogo Schneider 02.10.2012 16:23
quelle
0

Ich glaube nicht, dass es etwas verwirren wird, wenn Sie nicht explizit mit dem Array impliziter Argumente arbeiten. Warum tust du das?

    
Jordan Denison 02.10.2012 16:09
quelle
0

Werfen Sie einen Blick auf diese Post und vielleicht dieses .

Von MDN :

  

Das Objekt arguments ist eine lokale Variable, die in all verfügbar ist   Funktionen ; arguments als Eigenschaft von Function kann nicht mehr verwendet werden.

     

Sie können auf die arguments einer Funktion innerhalb der Funktion verweisen, indem Sie verwenden   das Objekt arguments . Dieses Objekt enthält einen Eintrag für jedes Argument   an die Funktion übergeben, wobei der Index des ersten Eintrags bei 0 beginnt.

     

Sie können das Objekt arguments verwenden, wenn Sie eine Funktion mit mehr aufrufen    arguments , als formell akzeptiert wird. Diese Technik ist   nützlich für Funktionen, die eine variable Anzahl von übergeben werden können   Argumente.

%Vor%     
Chase 02.10.2012 16:14
quelle