在for循环中声明变量和外部循环之间有什么区别?

时间:2012-11-01 12:02:20

标签: javascript

我搜索了这个问题,但答案我没有解决我的问题。这是我的问题,我有一个有10名成员的阵列。

Js代码

var array = [1,2,3,4,5,6,7,8,9,10];

循环1:

for(var i=0,len=array.length;i<len;i++){};

循环2

var len = array.length;
for(var i=0;i<len;i++){};

循环3

for(var i=0;i<array.length;i++){}

我知道1和3之间存在重大的性能差异。但是,1和2之间是否有任何性能差异? 。

4 个答案:

答案 0 :(得分:0)

不,没有任何区别。 Javascript将提升变量。

所以code1将是:

var i, len;
for (i=0, len=array.lengh; i<len; i++) {};

code2将是

var i, len;
len = array.lengh;
for (i=0; i<len; i++) {};

不同之处仅在于放置len=array.length

答案 1 :(得分:0)

虽然解析逻辑在示例2中还有一个要解析的令牌,但应该没有任何明显的区别。

越短越好:var a,b,c,d;应该比

更快
var a; var b; var c; var d;

答案 2 :(得分:0)

Loop-1和Loop-2都是相同的,因为有一次初始化var len 所以没有性能差异。

答案 3 :(得分:0)

Javascript具有函数范围,而不是块范围(不包括新的let语法)。由于for循环不是函数,因此它不会创建新范围,这意味着

for (var i...) { ... }

完全相同
var i...
for (...) { ... }

然而,在javascript中每次迭代都会重新评估for循环的条件语句,这意味着

for(var i=0;i<array.length;i++){}

需要多次评估array.length,而这

var len = array.length;
for(var i=0;i<len;i++){};

一次评估一次。从理论上讲,它更快,但它是一个微观优化,它并不重要。