为什么javascript允许你在函数参数的末尾添加逗号?

问题描述 投票:0回答:2

我遇到了似乎关闭的javascript函数声明的更改。你可以做这样的功能:

let a = function (b,) {
    console.log(b);
}

我发现函数参数中的尾随逗号是允许的,因为git之间存在差异:

let a = function (
    b,
) {
    console.log(b);
}

let a = function (
    b,
    c,
) {
    console.log(b);
}

是git diffs真正的原因,因为它的工作我相信只有在ECMAScript-2017。

javascript ecmascript-6 ecmascript-2017 ecmascript-7
2个回答
0
投票

git diffs真的是因为它起作用我只相信ECMAScript-2017。

基本上,答案是肯定的。引用原始的proposal(粗体文字是我的)

在一些代码库/样式指南中,出现了一些场景,其中函数调用和定义分为多行,格式如下:

 1: function clownPuppiesEverywhere(
 2:   param1,
 3:   param2
 4: ) { /* ... */ }
 5: 
 6: clownPuppiesEverywhere(
 7:   'foo',
 8:   'bar'
 9: );

在这些情况下,当某些其他代码贡献者出现并向其中一个参数列表添加另一个参数时,它们必须进行两行更新:

 1: function clownPuppiesEverywhere(
 2:   param1,
 3:   param2, // updated to add a comma
 4:   param3  // updated to add new parameter
 5: ) { /* ... */ }
 6: 
 7: clownPuppiesEverywhere(
 8:   'foo',
 9:   'bar', // updated to add a comma
10:   'baz'  // updated to add new parameter
11: );

在对由版本控制系统(git,subversion,mercurial等)管理的代码进行此更改的过程中,第3行和第9行的blame / annotation代码历史信息更新为指向添加逗号的人(而不是比最初添加参数的人)。

为了帮助缓解此问题,其他一些语言(Python,D,Hack,......可能还有其他语言......)添加了语法支持,以允许在这些参数列表中使用尾随逗号。这允许代码贡献者始终在其中一个每行参数列表中使用尾随逗号结束参数添加,并且再也不必担心代码归属问题


1
投票

来自ECMAScript 2017 allows trailing commas in function parameter lists.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Trailing_commas。 规范允许。 我不认为这个功能的唯一原因是帮助控制系统(如git)跟踪,即使id这是一个很好的... 另一个原因是重新排列项目更简单,因为如果最后一项更改其位置,则不必添加和删除逗号。根据我的说法,这是主要的原因......在介绍之前,我总是问自己为什么JS对我们这些可怜的开发人员如此严格...... :-)

© www.soinside.com 2019 - 2024. All rights reserved.