37

这篇文章中,Nick Craver提供了一个他使用的答案:

function(_, id)

此代码在使用它之前没有将下划线声明为变量。我在谷歌和这里的搜索只指向使用下划线作为前缀的引用,而不是作为变量本身。它有什么作用?我喜欢尼克的解决方案,但这有点困扰我。

4

7 回答 7

49

我已经看到用于表示该变量是“无关”变量的下划线。这意味着它无关紧要,根本不使用。

在您指出的情况下,它用于表示他的函数有两个参数,但他只需要第二个。

于 2012-07-10T04:54:26.183 回答
21

下划线是一个有效的 JS 变量名。上面示例中命名的参数_可以用作任何其他变量。

但是,它通常用于向代码的后续(人类)读者指示不会使用传入的任何内容。(不过,代码的作者可能是邪恶的/无知的并在函数中使用它)。

于 2012-07-10T05:00:24.357 回答
11

作为初学者,我未能收集与此答案相关的许多方面,这些方面分散在评论和其他答案中。因此,我将尝试在下面合并它们:

首先,在上述代码中,下划线参数的使用如下:-

$(this).val('').attr('id', function(_, id) { return id + i });

这里attr的函数的 jQuery 文档中,存在一个重载形式is 。在这种形式中被描述为attr.attr( attributeName, function )function

类型:函数(整数索引,字符串属性)

因此,它需要两个参数。但是,在我们的代码中,我们只需要id,它恰好是第二个参数。

现在,由于 JS 处理函数参数的方式,我们不能将其写为function(id),因为 JS 会映射idindex(预期的第一个参数function)。因此,我们编写的函数需要有两个参数。

在这里,一个标准的约定开始发挥作用。正如这里提到的,

下划线字符 (_) 用作指示未使用的函数参数的标准方式。

然而,这只是一个惯例,而不是一个规则。我们可以将未使用的参数命名为indexunused同样。那是,

$(this).val('').attr('id', function(unused, id) { return id + i });

将是一个有效的等价物。

因此,这种使用 _ 代替未使用参数的用法可以用于任何其他具有类似覆盖形式的 jQuery 函数。例如,在这个答案中,我们可以看到下划线在调用中的用法$.text()。只是为了确认,有一个重写的形式,它接受一个带有两个参数的函数,如此$.text()所示。

于 2016-04-18T16:05:07.097 回答
6

按样式,_通常用作占位符变量。一个不会真正在作用域中使用的变量。

于 2012-07-10T04:56:23.797 回答
2

尽管所有答案都解释说这是一种代码样式“hack”来指示未使用的参数,但它通常是一种不好的做法(想法)。它将覆盖_在父作用域中声明的任何变量。这将阻止您使用定义的库_(例如 underscorejs)。它甚至不是某种优化,因为它无论如何都声明了一个变量。

您最好使用参数的描述性名称,并将其视为_常规变量。缩短变量名也被认为是不好的做法。所以,如果你打算使用这个“聪明的黑客”,请不要。

于 2017-05-10T11:34:46.700 回答
1

正如之前所有其他海报所说,它可以被视为一个占位符,以防不希望使用它。我在 python 中看到过类似的东西,当一个函数可以返回多个值,但只有需要的值是明确定义的。

例如

 a, _, c = foo(bar)

在这种情况下,'b' 的潜在返回值将被忽略(仍然可以通过 _ 访问),并且将使用 'a' 和 'c'。

于 2014-12-04T15:37:22.400 回答
0

我在一些遗留代码中看到了这种模式(在 _ 未定义时中断),结果证明它应该使用这个库:

https://underscorejs.org/

于 2022-02-10T16:11:22.003 回答