2016-04-28 141 views
0

什麼中有什麼函數參數和參數之間......區別

function(...args) { 
    // args is an array 
} 

function() { 
    // arguments is an array-like 
} 

因爲它很容易轉換一個類似數組的數組之間的區別,有沒有還有其他的區別嗎

類似的問題:

myFunction.apply(null, args); 

myFunction(...args); 
+0

opps yes。錯字... – stevemao

+0

肯定[快速google](https://www.google.ca/search?q=javascript+%22...args%22+vs+arguments&oq=javascript+%22...args%22+ vs +參數)會在這裏工作?點擊第一次點擊,搜索「...」,即將發佈的信息? –

+0

@Mike'args'是一個任意名稱,所以如果您打算期待標題爲* Arguments object *的頁面來處理其餘參數,那麼您可能只需搜索* javascript參數*。當然,如果你知道他們被稱爲休息參數,這將是一個更好的搜索。 – JMM

回答

6
  1. ...args是新的;不可用,直到ES6
  2. 您可以使用它的參數結構的一部分:function(foo, bar, ...others)
  3. 你得到一個數組,所以沒有更多的Array.prototype.slice.call(arguments, 0)
  4. ...args是比較明顯的代碼讀者
  5. 現在,我們有比賽和打火機,我們不需要搓棍子來製造火災

然而,作爲1的推論,not everything supports it yet

2

重新:(經過時null或如thisArgapply()如示例)apply()和傳播之間的差異:

myFunction.apply(null, args); 
myFunction(...args); 
從傳播

除了能新望,所以沒有被廣泛當前支持apply()接受一個數組或類似數組的對象的參數,而傳播將在任何可迭代的工作。例如,您可以傳播一個SetMap作爲參數,而您不能將它作爲argArray的參數傳遞給apply()(儘管您當然可以將它作爲參數傳播給call()myFunction.call(whatever, ...someIterable))。

由於將數組轉換爲數組非常容易,還有其他區別嗎?

這對arguments並不那麼容易。做錯了(或者根本不可能)會導致JS引擎去優化函數,如果有正確的方法來避免它需要惱人的樣板來做。

+0

謝謝!可迭代的東西很容易被誤解爲IMO。 – stevemao

相關問題