带“-”的Javascript函数参数

带“-”的Javascript函数参数,javascript,syntax,Javascript,Syntax,我遇到了一个奇怪的问题。在我的js文件中,我编写了一个带有参数的函数,其中一个参数是“file name” function fileSize(id, file-name) { // some code } 这给了我一个错误,但当我将参数名更改为文件名时,错误消失了 function fileSize(id, file_name) { // some code } 那么为什么会发生这种情况呢?在JavaScript中,标识符名称中不能有-,但允许有。引用 JavaScript标识符必

我遇到了一个奇怪的问题。在我的js文件中,我编写了一个带有参数的函数,其中一个参数是“file name”

function fileSize(id, file-name) {
  // some code
}
这给了我一个错误,但当我将参数名更改为文件名时,错误消失了

function fileSize(id, file_name) {
  // some code
}

那么为什么会发生这种情况呢?

在JavaScript中,标识符名称中不能有-,但允许有。引用

JavaScript标识符必须以字母、下划线或美元符号$开头;后续字符也可以是数字0-9。因为JavaScript区分大小写,所以字母包括大写字母A到Z以及小写字母A到Z

从JavaScript 1.5开始,您可以使用ISO 8859-1或Unicode字母,例如标识符中的å和ü。您还可以使用\uxxx Unicode转义序列作为标识符中的字符

因此,只有允许的特殊字符是u和$。

在javascript中,-标记由减法运算符使用。因此,当解析器遇到:

file-name
它将其解释为两个变量:file和name,其中name从file中减去

由于这是一个表达式,并且表达式在参数声明中无效,因此函数声明本身将变为无效

虽然我们可以设计语言,使-符号在参数声明中不意味着减法,但我们不能在代码后面使用参数,因为语言无法区分文件名和文件名。其他语言可能有语法来处理这个问题,但是javascript没有,它使用object[file name]语法处理对象属性,但不处理局部变量


这就是javascript不允许在变量和函数名中使用-符号的原因。

您的结论不够全面;函数x{}@dandavis是的,这是正确的。这有什么不对?你所说的字母A-Z+A-Z,这一部分可能会误导读者阅读你的答案。事实上,我甚至不知道字母是什么意思。有些unicode是字母,有些不是。我并不是说你错了,只是有点过度限制。如果参数/变量在源文本中被称为标识符s,是的,我认为运行varƒ=1;在控制台上没有错误地伪造了理论。这是[ALT]+[1][5][9]顺便说一句,不是unicode序列……看起来完美而全面,为我的引导提供了一些启示。谢谢