Underscore as a JavaScript variable?
Underscore as a JavaScript variable?
在这篇文章中,Nick Craver提供了一个他使用的答案:
function(_, id)
这段代码在使用下划线之前不会将其声明为变量。我在谷歌和这里的搜索只指向使用下划线作为前缀的引用。,而不是作为变量本身。它做什么?我喜欢Nick的解决方案,但这让我很困扰。
我看到下划线用来表示变量是"不在乎"的变量。这意味着它并不重要,也根本不用。
在你指出的例子中,它被用来表示他的函数有两个论点,但他只需要第二个。
Undercore是一个有效的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
的第一个参数)。因此,我们编写的函数需要有两个参数。
在这里,一个标准的惯例开始发挥作用。如前所述,
下划线字符(_)用作指示未使用的函数参数的标准方式。
然而,这只是一个惯例,而不是一条规则。我们也可以将未使用的参数命名为index
或unused
。也就是说,
$(this).val('').attr('id', function(unused, id) { return id + i });
将是有效的等价物。
因此,使用_来替换未使用的参数可以用于具有类似重写形式的任何其他jQuery函数。例如,在这个答案中,我们可以看到在对$.text()
的调用中使用下划线。只是为了确认一下,$.text()
有一个重写的表单,它接受一个带有两个参数的函数,如下所示。
根据样式,_
通常用作占位符变量。一个不会在作用域中真正使用的变量。
尽管所有答案都解释了这是一种代码风格的"破解",用于指示未使用的参数,但这通常是一种糟糕的做法(想法)。它将覆盖在父作用域中声明的任何变量_
。这将阻止您使用定义_
的库(例如underscorejs)。它甚至不是某种优化,因为它声明了一个变量。
您应该更好地使用参数的描述性名称,并将_
视为常规变量。缩短变量名称也被认为是不好的做法。所以,如果你打算使用这个"聪明的黑客",请不要。
正如之前所有其他海报所说,在不希望使用的情况下,它可以被视为占位符。我在python中看到过类似的情况,一个函数可以返回多个值,但只显式定义了所需的值。
例如
a, _, c = foo(bar)
在这种情况下,"b"的潜在返回值将被忽略(_仍然可以访问该值),并且将使用"a"answers"c"。
我在一些遗留代码中看到了这个模式(它在未定义的情况下崩溃),结果发现它应该使用这个库:
https://underscorejs.org/
- 将Transform和Instance Variable转换为对象的JavaScript数组
- ColdFusion XML to Javascript variable
- 使用 JavaScript 显示 Laravel's Variable
- javascript cookie value variable
- javascript中不带转义字符串的${variable}用法
- 将 JavaScript 元素 ID 传递给 PHP 或 Form Variable
- integer empty variable javascript
- Javascript/JQuery variable
- Underscore as a JavaScript variable?
- Javascript Grab PHP variable
- 如何使用 href=variable 在 javascript 中创建元素
- text+变量连接作为 appendChild($variable) 中的字符串与纯 javascript
- ASP.Net variable to JavaScript
- IE 9 Javascript Window Variable 为 null.适用于IE 8
- Javascript 承诺 .catch 仍然调用 final variable.then
- JavaScript 中有没有办法使用 string+variable 作为变量
- Mandrill Email with Variable from extra javascript
- 在 JavaScript 中使用 window[“variable” + i]
- Variable Javascript to PHP int
- $variable和$variable有什么区别?和“;variable"- JavaScript - jQu