在这篇文章中,Nick Craver提供了一个他使用的答案:
function(_, id)
此代码在使用下划线之前不会将其声明为变量。我在 google 和 here 上的搜索仅指向使用下划线作为前缀的引用,而不是作为变量本身。它有什么作用?我喜欢尼克的解决方案,但这让我很困扰。
在这篇文章中,Nick Craver提供了一个他使用的答案:
function(_, id)
此代码在使用下划线之前不会将其声明为变量。我在 google 和 here 上的搜索仅指向使用下划线作为前缀的引用,而不是作为变量本身。它有什么作用?我喜欢尼克的解决方案,但这让我很困扰。
我已经看到下划线用来表示该变量是一个“无关”变量。这意味着它无关紧要,根本不使用。
在您指出的情况下,它用于表示他的函数有两个参数,但他只需要第二个参数。
下划线是一个有效的 JS 变量名。_
上例中命名的参数可以用作任何其他变量。
但是,它通常用于向代码的后续(人类)阅读者表明传入的任何内容都不会被使用。(不过,代码的作者可能是邪恶的/无知的,并在函数中使用它)。
作为初学者,我未能收集与此答案相关的许多方面,这些方面分散在评论和其他答案中。因此,我将尝试在下面合并它们:
首先,在提到的一段代码中,下划线参数的使用如下:
$(this).val('').attr('id', function(_, id) { return id + i });
从这里attr
函数的 jQuery 文档中,存在一个重载形式是。在以这种形式被描述为attr
.attr( attributeName, function )
function
类型:函数(整数索引,字符串属性)
因此,它需要两个参数。然而,在我们的代码中,我们只需要id
,它恰好是第二个参数。
现在,由于 JS 处理函数参数的方式,我们不能将它写为function(id)
,因为 JS 会映射id
到index
(预期的第一个参数function
)。因此,我们编写的函数需要有两个参数。
在这里,一个标准约定开始发挥作用。正如这里提到的,
下划线字符 (_) 用作指示未使用的函数参数的标准方式。
但是,这只是惯例,而不是规则。我们可以将未使用的参数命名为 asindex
或unused
as well。那是,
$(this).val('').attr('id', function(unused, id) { return id + i });
将是一个有效的等价物。
因此,这种使用 _ 代替未使用参数的用法可用于任何其他具有类似覆盖形式的 jQuery 函数。例如,在这个答案中,我们可以看到在调用中下划线的用法$.text()
。只是为了确认,$.text()
有接受函数有两个参数,如图重写的形式在这里。
按样式,_
通常用作占位符变量。一个不会在作用域中真正使用的变量。
尽管所有答案都解释说这是一种代码风格的“hack”,以指示未使用的参数,但它通常是一种不好的做法(想法)。它将覆盖_
在父作用域中声明的任何变量。这将阻止您使用定义的库_
(例如 underscorejs)。它甚至不是某种优化,因为它无论如何都声明了一个变量。
您最好使用参数的描述性名称并将其视为_
常规变量。缩短变量名称也被认为是不好的做法。所以,如果你打算使用这个“聪明的黑客”,请不要。