2016-08-01 8 views
0

Warum muss ich im folgenden Beispiel sowohl den Restparameter als auch den Spread-Operator verwenden?

function f(...y){ 
 
     y.forEach(v => { 
 
     console.log("111"); 
 
     console.log(v); 
 
     }); 
 
    } 
 

 
var z=["a","b","c","d","e","f"]; 
 

 
f(z);

Erwartete Ausgabe:

"111" 
"a" 
"111" 
"b" 
"111" 
"c" 
"111" 
"d" 
"111" 
"e" 
"111" 
"f" 

tatsächliche Ausgang:

"111" 
["a", "b", "c", "d", "e", "f"] 

Erst wenn ich die Linie f(z) ändern f(...z) ich die erwartete Ausgabe zu erhalten. Ich bin neu in ECMAScript 2015. Bitte sagen Sie mir, was ich hier vermisse.

+0

Ruhe Parameter nicht notwendig ist, erwartete Ergebnis zurückkehren, können Sie 'Funktion f (y) {} ' – guest271314

Antwort

3

f(z) bedeutet, dass nur ein Argument (in diesem Fall ein Array) an die Methode übergeben wird, während f(...z) bedeutet, dass die Werte im Array als Parameter an die Funktion übergeben werden.

Lesen Sie weiter:

  1. Spread operator
  2. Rest parameters

function f(...y){ 
 
     console.log(y.length); 
 
    } 
 

 
var z=["a","b","c","d","e","f"]; 
 
f(z); 
 
f(...z);

+0

Das macht es ziemlich klar. Wenn ich also 'f (z)' anrufe, passiert der Parameter 'z', da das ganze Array das erste Element des Array-Arguments' ... y' wird. Ich werde noch einige Zeit warten, um zu sehen, ob andere zusätzliche Punkte haben. Ich werde dann weitermachen und diese Antwort später akzeptieren. Vielen Dank! – roray

+1

Ja, wenn Sie 'z' übergeben, behandelt' ... y' es als einen einzelnen Parameter. während '... z' expandiert' z' und '... y' bekommt 6 params –

+0

Meine zwei Cent: Sie müssen nichts für die gewünschte Ausgabe verbreiten. Sie können einfach 'var z = [" a "," b "," c "," d "," e "," f "]; (z) .forEach (Buchstabe => { console.log ("111"); console.log (Brief); }); ' – Michelangelo