【问题标题】:Why does javascript let you add comma in the end of function parameters?为什么javascript让你在函数参数的末尾添加逗号?
【发布时间】:2019-07-15 06:50:37
【问题描述】:

我在 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-2016


    【解决方案1】:

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

    【讨论】:

    • 我认为 OP 关于 git diffs 的部分暗示/意味着通过添加尾随逗号它可以帮助版本控制系统(即 git)跟踪实际更改的内容。请参阅给出的示例here,从以下段落开始:“第二,它有助于版本控制系统......”
    【解决方案2】:

    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 行的代码历史信息更新为指向 添加逗号的人(而不是最初添加逗号的人 添加参数)。

    为了帮助缓解这个问题,一些其他语言(Python、D、Hack、 ...可能是其他人...)添加了语法支持以允许尾随 这些参数列表中的逗号。 这允许代码贡献者 始终在其中一个中以尾随逗号结束参数添加 每行参数列表,永远不必担心代码 又是归属问题

    【讨论】:

    • 你不应该说它也可以在 Python 中使用,现在我恨自己知道...
    • @D.Mydło 为什么会这样?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 2017-08-22
    • 1970-01-01
    相关资源
    最近更新 更多