在for循环中声明两个变量

时间:2013-02-04 21:48:06

标签: javascript

是否可以在for循环的初始化部分声明两个变量?我想在字符串的每个字符上调用一个函数。

for(var i = 0, c = aString.charAt(i); i < aString.length; i++){//problem here: not itterating
    alert("c: "+c)
    func1[typeOfChar(c)]++
}

问题是字符串在某种意义上没有被删除c始终是字符串的第一个字母。 顺便说一句,alert仅用于解决问题的目的。

我很好奇,c在宣布时不需要var关键字?

更新:让它运转起来。我不会问,但我注意到编辑仍在进行中,我习惯不使用分号,因为它们是可选的。没有它们,如何编写for循环?我不添加它们,因为我认为它更简单,或者它们是否提高了可读性?

7 个答案:

答案 0 :(得分:23)

您希望c在每次迭代时更改,而不是在循环开始时声明它,请尝试

var i,c;
for(i = 0,c=aString.charAt(0); i < aString.length; ++i, c = aString.charAt(i)){
    alert("c: "+c)
    func1[typeOfChar(c)]++
}

为了它的价值,我认为它不是一个非常易读的代码,我会把它放在第一行。

以下是您正在使用的一些信息on the comma operator

另请注意,javascript没有针对for循环的块范围,因此您实际上在当前范围的顶部声明ic(这通常是当前范围的顶部)函数,或全局范围的顶部)。

这是一个小提琴:http://jsfiddle.net/maWua/

答案 1 :(得分:9)

在没有嵌套的情况下在for循环中包含多个递增变量的简单方法。此示例声明了3个变量。

for (var i = 0, j = 1, n = 2; i < 50, n < 50; i = i + 3, j = j + 3, n = n + 3){
    console.log("variable i: " + i);
    console.log("variable j: " + j);
    console.log("variable n: " + n);
}

请参阅codepen here

答案 2 :(得分:1)

在这种情况下,因为c仅依赖于i(和一个不变量)并且使用了循环的条件,我建议将其从循环结构:

// (Keep variable hoisting in mind)
for(var i = 0; i < aString.length; i++){
    var c = aString.charAt(i);
    alert("c: "+c);
    // ..
};

(原始问题是从未更新 c的值。)

答案 3 :(得分:1)

您应该将c = aString.charAt(i);放在循环体内。

例如:

for(var i = 0; i < aString.length; i++){
    c = aString.charAt(i);
    alert("c: "+c);
    func1[typeOfChar(c)]++ 
}

答案 4 :(得分:0)

下面:

c = aString.charAt(i)

i始终为零,因此无法按预期工作。初始化发生一次,当你刚刚初始化为0时,你试图在init期间获取char。

答案 5 :(得分:0)

是的,可以使用multiple var statement,但您确实成功了。但是,在初始化语句中仅为其分配一次不会使其更改。

您需要在循环之前和每次循环之后执行一次

for (var i=0, c=str.charAt(i); i<str.length; c=str.charAt(++i)) …

或者在条件

的每个回合之前进行
for (var i=0, c; c=str.charAt(i), i<str.length; i++) … // comma operator
for (var i=0, c; c=str.charAt(i); i++) … // empty string as condition

或只是在循环中移动

for (var i=0, c; i<str.length; i++) { c=str.charAt(i); … }

答案 6 :(得分:0)

另一种选择是使用while,在某些情况下更清楚:

var i = 0;
while(i < aString.length){
   c = aString.charAt(i);
   alert("c: "+c)
   func1[typeOfChar(c)]++
   i++;
}