Javascript for循环中的循环变量声明样式 var each=\ each=\ forEach=函数(obj、迭代器、上下文){ 如果(obj==null)返回obj; if(nativeForEach&&obj.forEach===nativeForEach){ forEach(迭代器,上下文); }否则如果(对象长度===+对象长度){ 对于(变量i=0,长度=obj.length;i

Javascript for循环中的循环变量声明样式 var each=\ each=\ forEach=函数(obj、迭代器、上下文){ 如果(obj==null)返回obj; if(nativeForEach&&obj.forEach===nativeForEach){ forEach(迭代器,上下文); }否则如果(对象长度===+对象长度){ 对于(变量i=0,长度=obj.length;i,javascript,underscore.js,Javascript,Underscore.js,在Underline.js中的每个方法的实现中,循环变量设置如下 var each = _.each = _.forEach = function(obj, iterator, context) { if (obj == null) return obj; if (nativeForEach && obj.forEach === nativeForEach) { obj.forEach(iterator, context); } else if

在Underline.js中的每个方法的实现中,循环变量设置如下

var each = _.each = _.forEach = function(obj, iterator, context) {
    if (obj == null) return obj;
    if (nativeForEach && obj.forEach === nativeForEach) {
      obj.forEach(iterator, context);
    } else if (obj.length === +obj.length) {
      for (var i = 0, length = obj.length; i < length; i++) {
        if (iterator.call(context, obj[i], i, obj) === breaker) return;
      }
    } else {
      var keys = _.keys(obj);
      for (var i = 0, length = keys.length; i < length; i++) {
        if (iterator.call(context, obj[keys[i]], keys[i], obj) === breaker) return;
      }
    }
    return obj;
  };
for(变量i=0,长度=obj.length;i
为什么显式声明长度变量?下面的代码不是更简洁吗

for (var i = 0, length = obj.length; i < length; i++)
for(变量i=0;i
声明单独的
长度变量有几个可能的原因:

  • 将其本地缓存在自己的变量中可能比每次通过循环将其作为属性引用要快

  • 在某些情况下,数组长度可能会在迭代过程中增长,您可能不希望迭代新添加的元素


  • 声明单独的
    length
    变量可能有几个原因:

  • 将其本地缓存在自己的变量中可能比每次通过循环将其作为属性引用要快

  • 在某些情况下,数组长度可能会在迭代过程中增长,您可能不希望迭代新添加的元素


  • 声明单独的
    length
    变量可能有几个原因:

  • 将其本地缓存在自己的变量中可能比每次通过循环将其作为属性引用要快

  • 在某些情况下,数组长度可能会在迭代过程中增长,您可能不希望迭代新添加的元素


  • 声明单独的
    length
    变量可能有几个原因:

  • 将其本地缓存在自己的变量中可能比每次通过循环将其作为属性引用要快

  • 在某些情况下,数组长度可能会在迭代过程中增长,您可能不希望迭代新添加的元素


  • 它更简洁,但效率更低。在第二个循环中,每次迭代都提取
    obj.length
    。在第一种情况下,您只需检查一个设定值。它更简洁,但效率更低。在第二个循环中,每次迭代都提取
    obj.length
    。在第一种情况下,您只需检查一个设定值。它更简洁,但效率更低。在第二个循环中,每次迭代都提取
    obj.length
    。在第一种情况下,您只需检查一个设定值。它更简洁,但效率更低。在第二个循环中,每次迭代都提取
    obj.length
    。在第一种情况下,只需检查一个设定值。
    for (var i = 0; i < obj.length; i++)