2013-04-16 73 views
12

我碰到下面的JavaScript代码来:_(variable_name)在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); 
}; 

是什么_(孩子)是什么意思?

+0

可能在这里找到你的答案:http://stackoverflow.com/questions/4484424/underscore-prefix-for-property-and-method-names-in-javascript – showdev

+3

'_'是一个JavaScript标识符,可能用于在这种情况下[下划线](http://underscorejs.org/)库。 –

+0

@showdev:实际上'_()'是一个叫做.. ..的函数的调用。''_' –

回答

18

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

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


在提供您的例子,似乎underscore.js被用来治疗children作为收藏品,让indexOf function可以应用到集合中。这与拨打电话相似:

_.indexOf(children, target); 
+0

我没有看缩小的代码。如果_是一个传递孩子参数的函数,我不明白它的意思,因为_没有函数定义。 –

+0

@CharlesGao,缩写代码的意思是作为一般性评论,而不是针对你的具体情况。这种情况看起来好像代码使用下划线库来实现迭代集合的效用函数。 – zzzzBov

+0

有道理。 :) –

6

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

相当于

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])地图。 (...);.由Marc-AndréCournoyer提供的原始补丁。包装的对象可以通过多个方法调用进行链接。添加了一个函数方法,提供Underscore中所有函数的排序列表。

+0

[文档_(。)for _lodash_ 4.17.4](https://lodash.com/docs/4.17。4#lodash),这显然合并_lodash_和_underscore_, –

+0

关于“隐式链接”(与“显式链接”相反)的一个很好的解释:[隐式函数链接在Lodash中](https://blog.mariusschulz.com/ 2015/05/14 /隐函数链合lodash)。 Dat语法糖! –

相关问题