C#有类似的问题,但我们没有看到任何JavaScript。
在循环中声明变量是否被接受?
假设循环为200次迭代。
在样品1上使用样品2是否存在性能要求(记忆和速度)?我们正在使用jQuery循环。它提高了代码的可读性,使我们能够将var保留在循环中,但是如果它不是最佳实践,或者会导致性能大幅下降或内存使用率增加,我们将进行切换。
**Sample 1:**
$(this).each( function() {
var i = $(some_div).clone();
*** edit i ***
$(another_div).append( i );
});
**Sample 2:**
var i = null;
*** edit i ***
$(this).each( function() {
i = $(some_div).clone();
$(another_div).append( i );
});
答案 0 :(得分:3)
样本1(内部变量)更快: http://jsperf.com/variable-outside-faster
但这种差异并不值得关注。
答案 1 :(得分:3)
这是微观优化,停止这样做。
而是投入精力编写可读代码,编写文档并测试代码。
但是,有一些值得优化的高级问题:
答案 2 :(得分:0)
这取决于实施,但原则上我不认为性能会有任何明显的差异。由于您使用jQuery循环,i
变量将在第一种情况下位于函数范围内,而在第二种情况下位于外部范围中。这可能会对内存分配产生稍微不同的影响,但我怀疑它会引起注意。确保选择实现并尝试衡量其中的性能的唯一方法。
答案 3 :(得分:0)
这些可能在语义上有所不同,所以这是一个苹果到橙子的比较:
例如如果你在ajax回调中使用i
而不是同步,你几乎肯定会多次使用i
的最后一个赋值,而不是每次使用不同的值,如果你做了这个改变。
纯粹推测如下:
因此,我们知道如果你正在使用var
内部形式的全部潜力,那么每个i
需要不同的内存地址,那么它必须做更多工作。
需要进行重要分析才能确定$.each
同步使用它的回调参数。因此,如果这是一个有效的优化,我怀疑大多数JS编译器都无法实现它,并且手动制作应该可以为您提供(恒定时间)速度和内存改进。
其他注意事项:
更多词汇范围可能意味着线性增加查找变量的成本。