为什么在函数参数中同时使用扩展运算符和解构赋值的好处是什么?
P粉775723722
2023-08-16 16:27:57
<p>我一直遇到这种语法,但我很难理解它到底在做什么:</p>
<pre class="brush:php;toolbar:false;">export class SomeClass extends SomeParent {
constructor(...[configuration]) {
// 只引用“configuration”的代码行
}
}</pre>
<p>在Node REPL中尝试后,我发现以下两种写法没有区别:</p>
<pre class="brush:php;toolbar:false;">function foo(...[bar]) { console.log(bar); console.log(arguments) }</pre>
<p>...和...</p>
<pre class="brush:php;toolbar:false;">function foo(bar) { console.log(bar); console.log(arguments) }</pre>
<p>...那么它有什么作用呢?</p>
看起来确实毫无意义。您需要询问代码的作者他们在这方面的意图,他们至少应该留下一个注释。
然而,实际上存在微小的差异:剩余参数不计入函数的参数个数。因此,
(function(bar){}).length
是1
,而(function(...[bar]){}).length
是0
。