在this post,Nick Craver提供他在其中所使用的答案:作为JavaScript变量的下划线?
function(_, id)
此代码不使用它之前声明下划线作为变量。我在谷歌和这里的搜索仅指向使用下划线作为前缀的引用,而不是变量本身。它有什么作用?我喜欢尼克的解决方案,但这让我感到困扰。
在this post,Nick Craver提供他在其中所使用的答案:作为JavaScript变量的下划线?
function(_, id)
此代码不使用它之前声明下划线作为变量。我在谷歌和这里的搜索仅指向使用下划线作为前缀的引用,而不是变量本身。它有什么作用?我喜欢尼克的解决方案,但这让我感到困扰。
我看到下划线用来表示该变量是一个“无关”变量。这意味着它并不重要,根本不用。
在你指出的情况下,它被用来表示他的函数有两个参数,但他只需要第二个参数。
按照样式,_
通常用作占位符变量。一个不会在范围内真正使用的变量。
下划线是valid JS variable name。上例中名为_
的参数可以用作任何其他变量。
但是,它通常用于向随后的(人类)读者表明通过的代码不会被使用。 (虽然代码的作者可能是邪恶的/无知的,并在函数中使用它)。
正如之前所有其他海报所说,它可以被看作是一个占位符,在预计不会被使用的情况下。我在python中看到类似的东西,当一个函数可以返回多个值时,但只有明确定义了所需的值。
例如
a, _, c = foo(bar)
在这种情况下被忽略“B”的电位返回值(这可能仍然由被访问_),和“a”和“c”的将要使用的。
作为初学者,我没有收集与这个答案有关的许多方面,这些答案分散在评论和其他答案上。所以,我会尽力下面巩固他们:
首先,在提到一段代码,下划线参数的使用方法如下: -
$(this).val('').attr('id', function(_, id) { return id + i });
从jQuery的文档为attr
功能here,存在attr
的过载形式,即.attr(attributeName, function)
。在这种形式的function
被描述为
类型:函数(整数索引,字符串ATTR)
因此,需要两个参数。但是,在我们的代码中,我们只需要id
,这恰好是第二个参数。现在
,因为JS处理函数参数的方式,我们不能把它写成function(id)
,因为JS会映射到id
index
(预期function
第一个参数)。因此,我们写的函数需要有两个参数。
这里,标准约定的用武之地。如上所述here,
下划线字符(_)用作表示未使用的函数参数的标准方式。
然而,这仅仅是一个约定,而不是规则。我们可以将未使用的参数命名为index
或unused
。也就是,
$(this).val('').attr('id', function(unused, id) { return id + i });
将是一个有效的等效。
因此,_代替未使用的参数这样的使用可用于具有类似重写形式的任何其他jQuery函数。例如,在this的答案中,我们可以在$.text()
的调用中看到下划线的用法。为了确认,$.text()
有一个被覆盖的形式,它接受一个带有两个参数的函数,如here所示。
虽然所有的答案都解释说这是一种代码风格“黑客”来表示一个未使用的参数它通常是一种不好的做法(想法)。它将覆盖在父范围内声明的任何变量_
。这会阻止你使用定义为_
的库(例如下划线)。它甚至不是某种优化,因为它无论如何都会声明一个变量。
你应该更好地使用参数的描述性的名称,并考虑_
,就像一个正规的变量。缩短变量名称也被认为是不好的做法。所以,如果你打算使用这个“聪明的黑客”,请不要。
谢谢伊万。但是你知道为什么它可以被使用而不被宣布吗?我会很感激任何参考,我可以读更多关于这个 – 2012-07-10 05:20:50
在你提供的例子中,'_'被声明为函数中的一个参数。他根本没有使用它。 – Ivan 2012-07-10 05:26:25
啊!得到它了。 Thanx – 2012-07-10 05:28:04