为什么可以't我跳过函数签名中的参数分配
Why can't I skip parameter assignments in a function signature?
使用数组析构函数,可以通过插入没有前面引用的逗号来丢弃前导项:
const [ , two ] = [ 1, 2 ]
函数签名的情况并非如此——以下代码不会解析,因为签名中的前导逗号是意外的:
function ditchFirstArgument( , second ){}
为什么我需要为ES6函数表达式中的前导参数提供引用?
Roman从Go中获得的见解很有用,但不适合JS,因为在JS中,令牌_
是一个有效的引用,通常由Undercore和后来的Lodash库使用。
即使这是可以接受的,你也必须为每个未使用的参数创建并避免无用的引用,这并不理想。
但是,可以将函数参数解构为空对象,这样可以有效地在没有引用的情况下使参数无效。
function take_third( {}, {}, third ){
return third
}
编辑:正如Paul在评论中指出的那样,如果任何跳过的参数值是null
或undefined
,就会抛出。undefined
值可以通过默认分配进行保护,但这对null
:不起作用
function take_third( {} = {}, {} = {}, third ){
return third
}
为什么我需要为ES6函数表达式中的前导参数提供引用?
因为否则这将是一个语法错误。不仅在ES6中,而且在任何版本的语言中,你都不能省略形式参数,因为规范没有提供它
如果你真的想这样做(但为什么?),你可以把它写为
function ditchFirstArgument(...[, second]) {}
或者至少你可以在未来的ES版本中使用;看见https://github.com/tc39/ecma262/commit/d322357e6be95bc4bd3e03f5944a736aac55fa50.这似乎已经在Chrome中得到了支持。同时,你能做的最好的事情就是
function ditchFirstArgument(...args) {
const [, second] = args;
但是为什么规范不允许省略参数呢?
你必须询问编写它的人,但他们可能从未考虑过它,或者如果他们考虑过,就拒绝了它,因为它很容易出错,几乎没有必要,而且可以很容易地使用伪形式参数(如_
)来解决问题。
我相信用下划线命名未使用的变量是一种常见的模式:
function ditchFirstArgument(_, second) { /* ... */ }
虽然它不会阻止您实际使用此变量(如Go中),但它似乎是一个非常简单的解决方法。
- 如何在jQuery中将链接函数分配给变量
- 如何在不使用javascript执行的情况下为函数分配参数
- Javascript从函数分配属性
- 将JavaScript函数分配给提交按钮,该按钮应有条件执行
- 将 jQuery 函数分配给变量不起作用,但包装它不起作用
- 通过参数将传递的函数分配给动态创建的输入类型的onclick事件
- 如何将printThis插件函数分配给按钮
- Javascript-将函数分配给变量dos'不能按预期工作
- 将函数分配为原型函数的属性
- JavaScript 将函数分配给变量而不运行它
- 是否将函数分配给变量的区别
- q 从 .then 函数分配给更高级别的作用域变量是否存在任何陷阱
- JavaScript 将函数分配给对象属性
- 为 jQuery 函数分配多组参数
- 在 JavaScript 中将同一函数分配给多个变量时出现性能问题
- 使用eval使用字符串输入按名称将函数分配给变量有什么风险
- 如何将函数分配给在页面加载后动态添加的元素
- 为什么在模块模式中将函数分配给变量
- 将异步函数及其回调函数分配给单个变量
- 我无法为我的 jquery 函数分配鼠标悬停事件