2

以下 CoffeeScript 代码:

for a in arr
  do_something_with arr.length

编译为:

var a, _i, _len;

for (_i = 0, _len = arr.length; _i < _len; _i++) {
  a = arr[_i];
  do_something_with(arr.length); // I want to use '_len' here
}

是否可以使用缓存的值arr.length而不是在每次迭代中计算它?

4

2 回答 2

3

如果您有一个定义的数组而不是一个范围数组,那么您实际上可以在块中使用 _len :

for a in arr
  _len == arr.length

但是,这依赖于 CS 内部结构,可能会在新版本中发生变化。它也不适用于每个阵列。

arr = [0..10]
for a in arr
  #this works
  console.log _len

但:

for a in [0..10]
  #this doesn't work
  console.log _len

我认为如果你想使用数组长度的缓存版本,最好在你的代码中明确地做到这一点,而不是依赖于 CS 的内部变量名称。

宁可这样做:

arrLength = arr.length
for a in arr
   doSomethingWith arrLength
于 2012-05-16T07:34:12.047 回答
2

考虑?

for i in [0...len = arr.length]
  a = arr[i]
  do_something_with len
于 2012-05-16T11:56:25.510 回答