下划线作为JavaScript变量?

时间:2012-07-10 04:52:53

标签: javascript

this post中,Nick Craver提供了他使用的答案:

function(_, id)

此代码在使用之前不会将下划线声明为变量。我在谷歌和此处的搜索仅指向使用下划线作为前缀的引用,而不是作为变量本身。它有什么作用?我喜欢Nick的解决方案,但这让我感到困扰。

6 个答案:

答案 0 :(得分:37)

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

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

答案 1 :(得分:15)

下划线是valid JS variable name。上例中名为_的参数可用作任何其他变量。

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

答案 2 :(得分:5)

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

首先,在上面提到的代码中,下划线参数的用法如下: -

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

attr函数here的jQuery文档中,存在attr的重载形式.attr( attributeName, function )。此表单中的function被描述为

  

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

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

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

这里,标准惯例发挥作用。如上所述here

  

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

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

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

将是一个有效的等价物。

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

答案 3 :(得分:4)

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

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

正如之前所有其他海报所说的那样,在预计不会被使用的情况下,它可被视为占位符。我在python中看到类似的东西,当一个函数可以返回多个值时,但只显示了所需的值。

例如

 a, _, c = foo(bar)

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