为什么我不能跳过函数签名中的参数分配?
Why can't I skip parameter assignments in a function signature?
通过数组解构,可以通过在没有前面引用的情况下插入逗号来丢弃前导项:
const [ , two ] = [ 1, 2 ]
函数签名并非如此——以下代码将无法解析,因为签名中的前导逗号是意外的:
function ditchFirstArgument( , second ){}
为什么我需要为 ES6 函数表达式中的前导参数提供引用?
我认为用下划线命名未使用的变量是一种常见的模式:
function ditchFirstArgument(_, second) { /* ... */ }
虽然它不会阻止您实际使用此变量(如 Go),但它似乎是一个非常简单的解决方法。
Why do I need to provide references for leading parameters in ES6 function expressions?
否则会出现语法错误。不仅在 ES6 中,而且在任何版本的语言中,你都不能省略形式参数,因为规范没有提供它。
如果你真的想这样做(但为什么?),你可以把它写成
function ditchFirstArgument(...[, second]) {}
或者至少你将能够在未来的某个 ES 版本中使用;参见 https://github.com/tc39/ecma262/commit/d322357e6be95bc4bd3e03f5944a736aac55fa50。这似乎已经在 Chrome 中得到支持。与此同时,你能做的最好的事情就是
function ditchFirstArgument(...args) {
const [, second] = args;
But why does the spec not allow elision of parameters?
你不得不问写它的人,但他们可能从来没有考虑过,或者即使他们考虑过,也拒绝了它,因为它容易出错,几乎没有必要,而且可以很容易地解决使用虚拟形式参数,如 _
.
from Go is useful but inappropriate to JS where the token _
is a valid reference, conventionally used by the Underscore and later Lodash 个库。
即使这是可以接受的,您也必须为每个未使用的参数创建并避免无用的引用,这并不理想。
但是,可以 destructure a function argument 变成一个 空对象 ,这会有效地使没有引用的参数无效。
function take_third( {}, {}, third ){
return third
}
编辑:正如 Paul 在评论中指出的那样,如果任何跳过的参数值是 null
或 undefined
,这将抛出。 undefined
值可以通过默认赋值来防止,但这不适用于 null
:
function take_third( {} = {}, {} = {}, third ){
return third
}
通过数组解构,可以通过在没有前面引用的情况下插入逗号来丢弃前导项:
const [ , two ] = [ 1, 2 ]
函数签名并非如此——以下代码将无法解析,因为签名中的前导逗号是意外的:
function ditchFirstArgument( , second ){}
为什么我需要为 ES6 函数表达式中的前导参数提供引用?
我认为用下划线命名未使用的变量是一种常见的模式:
function ditchFirstArgument(_, second) { /* ... */ }
虽然它不会阻止您实际使用此变量(如 Go),但它似乎是一个非常简单的解决方法。
Why do I need to provide references for leading parameters in ES6 function expressions?
否则会出现语法错误。不仅在 ES6 中,而且在任何版本的语言中,你都不能省略形式参数,因为规范没有提供它。
如果你真的想这样做(但为什么?),你可以把它写成
function ditchFirstArgument(...[, second]) {}
或者至少你将能够在未来的某个 ES 版本中使用;参见 https://github.com/tc39/ecma262/commit/d322357e6be95bc4bd3e03f5944a736aac55fa50。这似乎已经在 Chrome 中得到支持。与此同时,你能做的最好的事情就是
function ditchFirstArgument(...args) {
const [, second] = args;
But why does the spec not allow elision of parameters?
你不得不问写它的人,但他们可能从来没有考虑过,或者即使他们考虑过,也拒绝了它,因为它容易出错,几乎没有必要,而且可以很容易地解决使用虚拟形式参数,如 _
.
_
is a valid reference, conventionally used by the Underscore and later Lodash 个库。
即使这是可以接受的,您也必须为每个未使用的参数创建并避免无用的引用,这并不理想。
但是,可以 destructure a function argument 变成一个 空对象 ,这会有效地使没有引用的参数无效。
function take_third( {}, {}, third ){
return third
}
编辑:正如 Paul 在评论中指出的那样,如果任何跳过的参数值是 null
或 undefined
,这将抛出。 undefined
值可以通过默认赋值来防止,但这不适用于 null
:
function take_third( {} = {}, {} = {}, third ){
return third
}