_(variable_name) 在 javascript 中是什么意思?

问题描述 投票:0回答:4

我遇到了以下 JavaScript 代码:

this.removeEdge = function(source, target) {
  if(!_states[source]) return;

  var children = _states[source].children,
      index = _(children).indexOf(target);
  if(index !== -1) children.splice(index, 1);
};

_(孩子)是什么意思?

javascript
4个回答
43
投票

_
是 JavaScript 中的有效变量标识符,理论上可以指代 anything。将
_(...)
与函数语法一起使用意味着
_
是一个函数。

也就是说,它通常由 underscore.js 库使用,但是如果您正在查看缩小的代码,它很可能被用作另一个单字符变量名称以节省文件大小。


在您提供的示例中,似乎 underscore.js 用于将

children
视为集合,以便
indexOf
函数
可以应用于该集合。这类似于调用:

_.indexOf(children, target);

13
投票

来寻找这个问题的答案并设法找到了一个。 _(variable) 语句将下划线括在变量周围。根据“面向对象和函数式样式”部分中的此链接

index = _(children).indexOf(target);

相当于

index = _.indexOf(children, target);

第一个是以面向对象的风格编写的,它允许函数链接。他们的例子如下:

_(lyrics).chain()
  .map(function(line) { return line.words.split(' '); })
  .flatten()
  .reduce({}, function(counts, word) { 
    counts[word] = (counts[word] || 0) + 1;

这些函数中的每一个都返回包装歌词的下划线函数,允许对歌词变量进行链式操作。

下划线变更日志:

0.4.0 — 2009 年 11 月 7 日: 现在可以以面向对象的方式调用所有 Underscore 函数,如下所示:_([1, 2, 3]).map(...);。原始补丁由 Marc-André Cournoyer 提供。包装对象可以通过多个方法调用进行链接。添加了一个函数方法,提供了 Underscore 中所有函数的排序列表。


3
投票
class Book {
  constructor(author) {
    this._author = author;
}

按照惯例,私有变量的名称前面带有下划线(_)。然而,这种做法本身并没有将变量设为私有。


0
投票

在 javascript 中,属性名称前面的 _ 表示该属性不应更改,因此我们使用下划线以便我们可以告诉该属性不应更改。

© www.soinside.com 2019 - 2024. All rights reserved.