下划线作为JavaScript变量?

Sip*_*ebu 30 javascript

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

function(_, id)
Run Code Online (Sandbox Code Playgroud)

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

Iva*_*van 40

我已经看到下划线用来表示该变量是一个"不关心"变量.这意味着它无关紧要,根本不使用.

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

  • 另外,如果有人想知道,他写`function(_,id)`而不是`function(id)`的原因是因为jQuery`attr()`接受一个有2个参数的函数,元素索引和属性.他不需要索引; 这就是为什么他把它标记为"不在乎". (11认同)

nha*_*tdh 15

Underscore是一个有效的JS变量名._上例中命名的参数可以用作任何其他变量.

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


Sar*_*dra 7

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

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

$(this).val('').attr('id', function(_, id) { return id + i });
Run Code Online (Sandbox Code Playgroud)

从jQuery文档中的attr功能在这里,存在一个重载形式的attr这是.attr( attributeName, function ).在function以这种形式被描述为

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

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

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

在这里,标准惯例发挥作用.如这里提到的,

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

但是,这只是一个惯例,而不是一个规则.我们可以将未使用的参数命名为index或者unused也可以.那是,

$(this).val('').attr('id', function(unused, id) { return id + i });
Run Code Online (Sandbox Code Playgroud)

将是一个有效的等价物.

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


Ult*_*nct 6

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