2017-03-02 91 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