_(variable_name)在javascript中的含义是什么?

时间:2013-04-16 20:33:39

标签: javascript

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

_(儿童)是什么意思?

3 个答案:

答案 0 :(得分:26)

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

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


在您提供的示例中,似乎使用underscore.js将children视为集合,以便indexOf function可以应用于集合。这与调用类似:

_.indexOf(children, target);

答案 1 :(得分:10)

寻找答案并设法找到答案。 _(变量)语句在变量周围包装下划线。根据“面向对象和功能样式”部分中的this link

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提供的原始补丁。可以通过多个方法调用来链接包装的对象。添加了一个函数方法,提供了Underscore中所有函数的排序列表。

答案 2 :(得分:0)

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

通常在私有变量的名称前加下划线(_)。但是,这种做法本身并未将变量设为私有。