首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript中的Difference _()和

javascript中的Difference _()和
EN

Stack Overflow用户
提问于 2011-10-14 03:28:09
回答 4查看 260关注 0票数 1

我一直在使用backbone.js,偶然发现了以下代码片段。

代码语言:javascript
复制
    _(view.buttonViews).each(function(button) {
        button.render();
      });

其中view.buttonViews是一个数组。如果我去掉_()并有

代码语言:javascript
复制
    view.buttonViews.each(function(button) {
        button.render();
      });

然后我得到一个错误,每个都不是一个函数。_()添加了什么?谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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;)出现。

票数 11
EN

Stack Overflow用户

发布于 2011-10-14 03:32:43

Backbone依赖于Underscore,它实现了许多实用功能。您可以使用_()函数包装一个数组,并按照演示的here使用下划线API。

下划线在不接触原型的情况下实现了这些函数,因此each不适用于常规数组。但是,它可以从包装原始数组的_函数返回的对象中调用。

票数 3
EN

Stack Overflow用户

发布于 2011-10-14 03:35:26

Backbone构建在underscore之上,这是一个工具库,提供了许多有用的功能,这些功能不是JS原生的,但可能应该是原生的(例如,遍历对象、数组映射、消除数组中的重复项等)。

它可以使用面向对象或函数式风格来编写。举个例子,你的代码片段也可以这样写:

代码语言:javascript
复制
_.each(view.buttonViews,function(button) {
        button.render();
      });
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7759427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档