我一直在使用backbone.js,偶然发现了以下代码片段。
_(view.buttonViews).each(function(button) {
button.render();
});其中view.buttonViews是一个数组。如果我去掉_()并有
view.buttonViews.each(function(button) {
button.render();
});然后我得到一个错误,每个都不是一个函数。_()添加了什么?谢谢!
发布于 2011-10-14 03:30:50
我猜是 提供了each方法:
_.each(list, iterator, [context])别名: forEach
迭代元素列表,依次生成一个迭代器函数。迭代器被绑定到上下文对象,如果传递了一个的话。每次使用三个参数调用迭代器:(element,index,list)。如果list是一个JavaScript对象,迭代器的参数将是(value,key,list)。委托给本机forEach函数(如果存在)。
这种方式,_([...]).each(...),只是调用它的另一种方式。
顺便说一句,它在Backbone's documentation中也有描述
主干的唯一硬依赖是Underscore.js。
正如@Jonathon已经说过的那样,一般来说,_是一个有效的变量名,在这种情况下,它包含一个函数。在函数引用后面添加括号将调用该函数,因此,_()将调用_所引用的函数。这没什么特别的。
除此之外,括号可以作为函数声明或表达式的一部分(function foo() {...})或作为grouping operator (var i = (20 + 1) * 2;)出现。
发布于 2011-10-14 03:32:43
Backbone依赖于Underscore,它实现了许多实用功能。您可以使用_()函数包装一个数组,并按照演示的here使用下划线API。
下划线在不接触原型的情况下实现了这些函数,因此each不适用于常规数组。但是,它可以从包装原始数组的_函数返回的对象中调用。
发布于 2011-10-14 03:35:26
Backbone构建在underscore之上,这是一个工具库,提供了许多有用的功能,这些功能不是JS原生的,但可能应该是原生的(例如,遍历对象、数组映射、消除数组中的重复项等)。
它可以使用面向对象或函数式风格来编写。举个例子,你的代码片段也可以这样写:
_.each(view.buttonViews,function(button) {
button.render();
});https://stackoverflow.com/questions/7759427
复制相似问题