【问题标题】:Understanding notation for functions used in JavaScript documentation [duplicate]了解 JavaScript 文档中使用的函数的符号 [重复]
【发布时间】:2016-05-15 10:00:00
【问题描述】:

每当我在 JS 中看到任何语法时,它都是以这种格式编写的

response.writeHead(statusCode[, statusMessage][, headers])
or
window.setTimeout(func, [delay, param1, param2, ...]); 

为什么每个人都使用这种数组表示法以及为什么逗号主要放在数组内部???? 为了表示回调也使用了这种语法,不明白为什么?

【问题讨论】:

  • 这既不是数组也不是 JS 语法。那是 可选参数 表示法。
  • 这不是 JavaScript 语法,而是它的文档。这种风格并不是 JavaScript 特有的,但至少在过去 30 年里已经在其他语言中使用了。

标签: javascript syntax callback


【解决方案1】:

当您在文档中看到此内容时:

response.writeHead(statusCode[, statusMessage][, headers])

...这意味着您可以通过以下方式之一调用该方法:

response.writeHead(statusCode)
response.writeHead(statusCode, statusMessage)
response.writeHead(statusCode, headers)
response.writeHead(statusCode, statusMessage, headers)

所以语法符号中的方括号表示某些东西是可选的。这也意味着逗号必须这样显示。

悬空逗号

你的第二个例子实际上是一个不太准确的描述:

window.setTimeout(func, [delay, param1, param2, ...]); 

因为如果过于字面意思,它似乎允许这样做:

window.setTimeout(func, );

但那是无效的语法,至少在 JavaScript 中这个语法描述符似乎是关于什么的。

允许的参数个数

上面的描述并没有明确指出你可以只用 2 个或 3 个参数调用这个方法,例如:

window.setTimeout(alert('hi'), 100); 

但很明显,情况就是这样。有些人更喜欢写这样的描述符:

window.setTimeout(func[, delay[, param1[, param2[, ...]]]]); 

没有人会提出第一个描述符的问题:它的意图很清楚。它是文档的一部分,而不是严格的语言。事实上,许多括号并没有真正增加这种描述符的可读性。问题是在哪里划清准确和清晰的界限。

省略号

还请注意,这些点表示后面可能会出现更多参数。该省略号也不应被视为文字。不要将其与某些语言语法中的省略号混淆(例如 Javascript spread operator)。这再次表明此文档约定不是一种非常严格的语言。

多个括号对

回到第一个例子。请注意,所描述的方法有两对括号。这实际上是有含义的,并且表达了在这个只有一对的替代描述符中不可见的可能性:

response.writeHead(statusCode[, statusMessage, headers])

不同的是,这个替代方案不允许允许这个调用:

response.writeHead(statusCode, headers)

如果想要传递headers,那么他们还必须提供statusMessage

response.writeHead(statusCode, statusMessage, headers)

但是,原始描述符确实允许这样做。这意味着所描述的方法非常聪明,因为它支持对使用 2 个参数进行的调用的两种不同解释:

response.writeHead(statusCode, statusMessage)
response.writeHead(statusCode, headers)

这显然是因为具有 statusMessage 含义的值可以与具有 header 含义的值区分开来。在这种特殊情况下,nodejs 将第二个参数视为 header,当它是一个对象时,当它是一个原始值(字符串)时,作为 statusMessage

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 2013-04-06
    • 1970-01-01
    相关资源
    最近更新 更多