function(...args) {
// args is an array
}
和
function() {
// arguments is an array-like
}
因爲它很容易轉換一個類似數組的數組之間的區別,有沒有還有其他的區別嗎
類似的問題:
myFunction.apply(null, args);
和
myFunction(...args);
function(...args) {
// args is an array
}
和
function() {
// arguments is an array-like
}
因爲它很容易轉換一個類似數組的數組之間的區別,有沒有還有其他的區別嗎
類似的問題:
myFunction.apply(null, args);
和
myFunction(...args);
...args
是新的;不可用,直到ES6function(foo, bar, ...others)
Array.prototype.slice.call(arguments, 0)
...args
是比較明顯的代碼讀者然而,作爲1的推論,not everything supports it yet。
重新:(經過時null
或如thisArg
到apply()
如示例)apply()
和傳播之間的差異:
myFunction.apply(null, args);
myFunction(...args);
從傳播
除了能新望,所以沒有被廣泛當前支持apply()
接受一個數組或類似數組的對象的參數,而傳播將在任何可迭代的工作。例如,您可以傳播一個Set
或Map
作爲參數,而您不能將它作爲argArray
的參數傳遞給apply()
(儘管您當然可以將它作爲參數傳播給call()
:myFunction.call(whatever, ...someIterable)
)。
由於將數組轉換爲數組非常容易,還有其他區別嗎?
這對arguments
並不那麼容易。做錯了(或者根本不可能)會導致JS引擎去優化函數,如果有正確的方法來避免它需要惱人的樣板來做。
謝謝!可迭代的東西很容易被誤解爲IMO。 – stevemao
opps yes。錯字... – stevemao
肯定[快速google](https://www.google.ca/search?q=javascript+%22...args%22+vs+arguments&oq=javascript+%22...args%22+ vs +參數)會在這裏工作?點擊第一次點擊,搜索「...」,即將發佈的信息? –
@Mike'args'是一個任意名稱,所以如果您打算期待標題爲* Arguments object *的頁面來處理其餘參數,那麼您可能只需搜索* javascript參數*。當然,如果你知道他們被稱爲休息參數,這將是一個更好的搜索。 – JMM