我遇到了以下 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 中的有效变量标识符,理论上可以指代 anything。将 _(...)
与函数语法一起使用意味着 _
是一个函数。
也就是说,它通常由 underscore.js 库使用,但是如果您正在查看缩小的代码,它很可能被用作另一个单字符变量名称以节省文件大小。
在您提供的示例中,似乎 underscore.js 用于将
children
视为集合,以便 indexOf
函数 可以应用于该集合。这类似于调用:
_.indexOf(children, target);
来寻找这个问题的答案并设法找到了一个。 _(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 中所有函数的排序列表。
class Book {
constructor(author) {
this._author = author;
}
按照惯例,私有变量的名称前面带有下划线(_)。然而,这种做法本身并没有将变量设为私有。
在 javascript 中,属性名称前面的 _ 表示该属性不应更改,因此我们使用下划线以便我们可以告诉该属性不应更改。