2017-03-02 121 views
-1

默認參數不分配給參數數組對象一樣沒有定義:ES6默認參數在參數

function fn(test = "test") { 
console.log(arguments); //[] 
} 

這可能是有用的只是什麼用戶傳遞給函數知道,但似乎太棘手。
這會改變嗎?

+0

您在徵求關於未來標準將會發生什麼的意見。 (你會期望他們向規範引入一個不向後兼容的變化嗎?) – Quentin

+0

通過規範的快速搜索沒有發現任何與此相關的事情,但是我的猜測**是不能棄用參數但它不會受到任何新功能的支持。例如,該規範明確指出,其餘參數不會添加到參數對象中。如果你調用你的函數'fn(1,2,3)',那麼參數將是'{「0」:1,「1」:2 ...}'。 –

回答

3

不,這不會改變。

事實上它已經變化 - 以前的arguments對象的各項指標被映射到相應的參數變量進行讀寫(恐怖來思考!)。這被證明具有破壞性的性能影響,因爲它阻止了很多引擎優化,並且在ES5中被棄用(然而,出於兼容性原因,僅在新的嚴格模式下)。在ES6中,如果它們在參數列表中使用新的ES6功能(如解構,默認初始化程序或其他語法),則該行爲在不嚴格模式下也不推薦使用。

arguments object is just a simple object with the argument values that passed to the function。注意,默認值沒有被傳遞,它只是在函數體的開頭初始化變量的語法糖。
如果映射到範圍變量,它是much more complicated