我在一个正在处理的大型项目(伪代码)中发现以下循环注释:
var someOtherArray = [];
for (var i = 0, n = array.length; i < n; i++) {
someOtherArray[i] = modifyObjetFromArray(array[i]);
}
引起我注意的是这个额外的“ n”变量。我以前从未见过这样写过的书。
显然,在这种情况下,没有理由不能以以下方式编写此代码(我已经很习惯了):
var someOtherArray = [];
for (var i = 0; i < array.length; i++) {
someOtherArray[i] = modifyObjetFromArray(array[i]);
}
但这让我思考。
编写这样的for循环是否有意义?这个想法浮现在脑海,“数组”的长度在for循环执行期间可能会改变,但是我们不想循环到比原始大小还远的地方,但是我无法想象这种情况。
在循环内缩小数组也没有太大意义,因为我们很可能会得到OutOfBoundsException。
是否有已知的设计模式在其中使用此注释?
编辑 如@ Jerry101所述,原因是性能。这是我创建的性能测试的链接:http : //jsperf.com/ninforloop。在我看来,除非您要遍历非常大的数组,否则差异并不足够大。我从中复制的代码最多只能包含20个元素,因此我认为这种情况下的可读性超过了性能方面的考虑。
n
可能会比使用的变体慢,array.Length
因为JITter可能不会注意到它可以消除数组边界检查。