The following CoffeeScript code:
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
的缓存值而不是在每次迭代中计算它?
答案 0 :(得分: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
答案 1 :(得分:2)
考虑?
for i in [0...len = arr.length]
a = arr[i]
do_something_with len