Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在for循环中声明两个变量_Javascript - Fatal编程技术网

Javascript 在for循环中声明两个变量

Javascript 在for循环中声明两个变量,javascript,Javascript,是否可以在for循环的初始化部分声明两个变量?我想对字符串的每个字符调用一个函数 for(var i = 0, c = aString.charAt(i); i < aString.length; i++){//problem here: not itterating alert("c: "+c) func1[typeOfChar(c)]++ } for(vari=0,c=aString.charAt(i);i

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

for(var i = 0, c = aString.charAt(i); i < aString.length; i++){//problem here: not itterating
    alert("c: "+c)
    func1[typeOfChar(c)]++
}
for(vari=0,c=aString.charAt(i);i
问题是字符串没有被指定为
c
始终是字符串的第一个字母。 顺便说一句,
警报
只是为了解决问题

我很好奇,为什么
c
在声明时不需要
var
关键字


更新:让它工作。我不打算问,但我注意到仍在进行编辑,我习惯于不使用分号,因为它们是可选的。没有它们,如何编写for循环?我之所以不添加它们,是因为我认为它越少越简单,还是它们提高了可读性?

如果希望
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)]++
}
vari,c;
对于(i=0,c=aString.charAt(0);i
值得一提的是,我认为它不会产生非常可读的代码,我会把它放在第一行

这是您正在使用的一些信息

还要注意,javascript没有for循环的块作用域,因此实际上是在当前作用域的顶部声明
i
c
(这通常是当前函数的顶部,或全局作用域的顶部)

这里有一把小提琴:

这里:

c = aString.charAt(i)

i
始终为零,因此它无法按预期工作。初始化只发生一次,当我刚被初始化为
0

时,您试图在初始化期间获取字符。在这种情况下,由于
c
仅依赖于
i
(和一个不变量),并且它不用于循环的条件,因此建议将其从循环构造中删除:

// (Keep variable hoisting in mind)
for(var i = 0; i < aString.length; i++){
    var c = aString.charAt(i);
    alert("c: "+c);
    // ..
};
//(记住可变起重)
对于(变量i=0;i

(原始版本的问题是它从未更新过
c
的值)

是的,使用a是可能的,您成功地做到了。但是,在初始化语句中仅为其赋值一次不会使其发生更改

你需要在每圈之前和之后做一次

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

for(var i=0,c=str.charAt(i);i您应该将
c=aString.charAt(i);
放在循环体内部

例如:

for(var i = 0; i < aString.length; i++){
    c = aString.charAt(i);
    alert("c: "+c);
    func1[typeOfChar(c)]++ 
}
for(变量i=0;i
在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);
}
(变量i=0,j=1,n=2;i<50,n<50;i=i+3,j=j+3,n=n+3){ log(“变量i:+i”); log(“变量j:+j”); log(“变量n:+n”); }

请参见代码笔

另一个选项是在
时使用
,在某些情况下更清晰:

var i = 0;
while(i < aString.length){
   c = aString.charAt(i);
   alert("c: "+c)
   func1[typeOfChar(c)]++
   i++;
}
var i=0;
而(i
对不起,我说的太多了,但是你不能把
c=aString.charAt(i)放进去吗
在for循环的第一行?你尝试了什么?你的代码有效吗?如果没有,你看到了什么错误?@JasonHall用户的重复次数>1000次,回答了11个问题,并提出了大量排名良好的问题。我想社区已经对该用户表现出足够的信心,认为他已经尝试过了。@Pointy当我添加第二个
var
I ge时错误“missing variable name”@Celeritas是的,当然你是对的;我必须检查规范。
for
循环有其独特的语法;它可能不需要
var
,因为第一个
var
覆盖了整个逗号分隔的列表(意味着我的第一个注释是错误的:-)@Bergi您是对的,我在第一次迭代时没有初始化C,javascript中的循环确实是基于0的。我进行了编辑。顺便说一句,OP没有使用逗号运算符。
“javascript没有for循环的块作用域”
-对于ES6+不再是真的,
let
关键字允许您定义块级作用域。
for(设i=0;i
i++
应更改
i
的值。
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);
}
var i = 0;
while(i < aString.length){
   c = aString.charAt(i);
   alert("c: "+c)
   func1[typeOfChar(c)]++
   i++;
}