在underscorejs模板中使用闭包

时间:2012-09-15 03:01:14

标签: javascript underscore.js

只是想知道在下划线模板中使用闭包是否有任何价值...说要跟踪计数器或其他东西。这是我的意思的一个小例子:

<% 
 (function( models ){
  var length = models.length-1,
      section = "";
    _.each( models, function ( item, index ) {
        if (index === 0) {
          section = "top";
        } else if (index === length) {
          section = "bottom";
        } else {
          section = "center";
        }
    %>
  <div class="container">
    <div class="gradiantDiv <%= section %>content">
      <a href="/#customer/<%= item._id %>">
        <address>
          <strong><%= item.name %></strong><br>
          <%= item.addr1 %><br>
          <%= item.city %>, <%= item.state %> <%= item.zip %><br>
          <abbr title="Phone">P:</abbr> <%= item.phone %>
        </address>
      </a>
    </div>

    <div class="gradiantDiv <%= section %>action">
        <i class="icon-chevron-right"></i>
    </div>
  </div>
<% 
    });
})( models );
%>

或者在_.each之前声明像“length”和“section”这样的变量而没有闭包更好吗?或者它有意义吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我个人并不知道创建在模板之外无法理解的变量有任何好处。

我们通常在优化或使代码更具可读性时创建变量。

(例如

长度仅使用一次。我认为使用它更具可读性和工作量。我在同行签到评论期间因为某些感知易读性而创建变量时被正确地骂了。

部分被多次使用,需要额外的逻辑,所以它很有意义。

模型除了强制解释器创建新指针外没有做任何事情,为什么在包含范围内可用时将其传入?

如果它使代码更清晰,或者优化某些内容,那么我认为这是值得的。