Что означает _ (variable_name) в 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);
};

Что означает _ (дети)?

Ответ 1

_ является допустимым идентификатором переменной в JavaScript и теоретически может ссылаться на что-либо. Использование _(...) с синтаксисом функции подразумевает, что _ является функцией.

Тем не менее, он обычно используется библиотекой underscore.js, однако, если вы смотрите на минифицированный код, его вполне можно использовать в качестве еще одного одноразового использования, имя переменной символа, чтобы сохранить размер файла.


В вашем примере показано, что underscore.js используется для обработки children в качестве коллекции, так что функция indexOf может быть применена к коллекции. Это будет похоже на вызов:

_.indexOf(children, target);

Ответ 2

Пришел искать ответ на этот вопрос и смог его найти. Оператор _ (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 - 7 ноября 2009 года: Все функции Underscore теперь можно вызывать в объектно-ориентированном стиле, например: _ ([1, 2, 3]). Map (...);. Оригинальный патч, предоставленный Марком-Андре Курноэром. Обернутые объекты могут быть связаны цепью посредством нескольких вызовов метода. Добавлен метод функций, содержащий отсортированный список всех функций в Underscore.