2016-08-01 33 views
0

爲什麼我必須在下面的例子中使用rest參數和spread運算符?

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

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

 
f(z);

預期輸出:

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

實際輸出:

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

只有當我改變f(z)f(...z)我得到的預期輸出線。我是ECMAScript 2015的新手。請告訴我在這裏錯過了什麼。

+0

休息參數是沒有必要返回預期的結果,你可以用'函數f(Y ){}' – guest271314

回答

3

f(z)意味着只有一個參數(在這種情況下,一個數組)傳遞給方法,而f(...z)意味着,數組中的值作爲參數傳遞給函數。

閱讀更多:

  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

這使它很清楚。所以當我使用'f(z)'調用時,整個數組成爲數組參數'... y'的第一個元素,參數'z'會發生什麼。我會等待更多的時間來看看其他人是否還有其他要點。接下來我會繼續接受這個答案。謝謝! – roray

+1

是的,當你通過'z'時,'... y'把它當作一個參數。而'... z'展開'z'並且'... y'得到6個參數 –

+0

我的兩分錢:你不需要爲期望的輸出傳播任何東西。你可以做'var z = [「a」,「b」,「c」,「d」,「e」,「f」]; (字母=> { console.log(「111」); console.log(letter); });'' – Michelangelo

相關問題