Javascript 在for循环中声明两个变量
是否可以在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(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;ii++
应更改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++;
}