JavaScript-Funktionsdeklaration mit denselben Argumenten

8

Ich lerne selbst JavaScript. Ich fand, wenn ich eine Funktion mit denselben Argumenten erkläre, funktioniert es gerade gut:

%Vor%

Aber wenn ich das tue:

%Vor%

Dann funktioniert es nicht mehr. Was ist die Logik hinter, dass es für die erste Gleichung funktioniert, aber nicht für zweite?

    
Marymon 21.03.2016, 13:01
quelle

4 Antworten

4

ES2015 (die neueste stabile Spezifikation für die Sprache) ermöglicht das Deklarieren von Parametern mit Standardwerten. Wenn Sie dies tun, können Sie in der Sprache einen Parameternamen nicht erneut verwenden.

Wenn Sie keine Parametereinstellungen vornehmen, erlaubt die Sprache die alte "schlampige" Wiederverwendung von Parameternamen. Wenn Sie die "strikte" Modusinterpretation aktivieren, erhalten Sie auch für Ihr erstes Beispiel eine Fehlermeldung.

    
Pointy 21.03.2016, 13:05
quelle
2

Gemäß der spec

  
  1. Wenn parameterNames doppelte Einträge enthält, lassen hasDuplicates wahr sein. Andernfalls lasst hasDuplicates false sein.
  2.   

21.b

     

HINWEIS Frühe Fehler stellen sicher, dass doppelte Parameternamen nur auftreten können   in nicht strikten Funktionen, die keine Parameter-Standardwerte oder haben   Ruheparameter.

So, Ihr JS-Engine stellt sicher, dass, wenn einer der Parameter Standardwerte hat und hasDuplicates gilt dann einen Fehler führt.

    
gurvinder372 21.03.2016 13:29
quelle
1

Nach MDN, diese Art der Kontrolle von JS intern im Fall von Ausfällen erfolgt

%Vor%

Nun, in Ihrem Fall ist das so etwas -

%Vor%

Aber bei der Ausführung von Fall 2 ist a immer noch nicht definiert und daher im Fehlerszenario.

Siehe hier Ссылка

    
Bikas 21.03.2016 13:05
quelle
0
  

Der Argumentname muss eindeutig sein. Wenn Sie denselben Namen für zwei Argumente verwenden und der Interpreter dann verwirrt, auf welchen Sie zugreifen möchten,

Sie haben den Code als Kommentar hinzugefügt

%Vor%
  

"Standardfunktionsparameter ermöglichen die Initialisierung von Formalparametern mit Standardwerten, wenn kein Wert oder undefined übergeben wird." Standardparameter in ES2015

    
itzmukeshy7 21.03.2016 13:07
quelle