為什麼在函數參數中同時使用擴充運算子和解構賦值的好處是什麼?
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
。