28

我遇到了以下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);
};

_(children) 是什么意思?

4

3 回答 3

36

_是 JavaScript 中的有效变量标识符,理论上可以引用任何. 使用_(...)with function 语法意味着这_是一个函数。

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


在您提供的示例中,似乎 underscore.js 被用作children集合,因此该indexOf函数可以应用于集合。这类似于调用:

_.indexOf(children, target);
于 2013-04-16T20:36:25.520 回答
12

来寻找答案并设法找到一个。_(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 日:现在可以以面向对象的方式调用所有下划线函数,如下所示:_([1, 2, 3]).map(...);。Marc-André Cournoyer 提供的原始补丁。包装的对象可以通过多个方法调用链接起来。添加了一个函数方法,提供了下划线中所有函数的排序列表。

于 2014-08-13T00:34:18.823 回答
3
class Book {
  constructor(author) {
    this._author = author;
}

约定在私有变量的名称前加上下划线 (_)。但是,实践本身并没有将变量设为私有。

于 2020-07-23T09:25:13.567 回答