在javascript中,在for循环中声明多个变量
具有以下javascript代码在javascript中,在for循环中声明多个变量,javascript,variables,for-loop,scope,Javascript,Variables,For Loop,Scope,具有以下javascript代码 // note: declaring i in this loop for( var i=0; i<args.length; i++ ) { var elem = args[i]; ... if( elem.attr == 'class' ) { // note declaring arr and i in this loop for( var arr=elem.val.split(' '), i=0
// note: declaring i in this loop
for( var i=0; i<args.length; i++ ) {
var elem = args[i];
...
if( elem.attr == 'class' ) {
// note declaring arr and i in this loop
for( var arr=elem.val.split(' '), i=0; i<arr.length; i++ ) {
element.classList.add(arr[classCt]);
}
continue;
}
}
//注意:在此循环中声明i
对于(var i=0;i您在那里只有一个作用域,因此只能有一个同名变量。您正确地认为,var允许用逗号分隔声明多个变量,但不能在同一作用域中声明两个同名的不同变量。您只是重新声明一个已经存在的变量
将其更改为classCt
,或者执行我所做的操作,并对嵌套循环迭代器使用变量j
(依此类推):
var i, j, k, l;
for(i = 0; i < 10; i++){
for(j = 0; j < 10; j++){
for(k = 0; k < 10; k++){
for(l = 0; l < 10; l++){
}
}
}
}
var i,j,k,l;
对于(i=0;i<10;i++){
对于(j=0;j<10;j++){
对于(k=0;k<10;k++){
对于(l=0;l<10;l++){
}
}
}
}
您只在一个作用域内工作,即使您使用var关键字,循环也不会创建自己的循环。您只是在当前功能范围内覆盖i变量,例如:
for (var i = 0; i < 10; i++) {
for (var i = 5; i < 10; i++) {
console.log(i);
}
}
for(变量i=0;i<10;i++){
对于(变量i=5;i<10;i++){
控制台日志(i);
}
}
将只打印5,6,7,8,9
如果要创建新的作用域,必须使用javascript中通常使用的函数:
for (var i = 0; i < 10; i++) {
(function(i) {
for (var i = 5; i < 10; i++) {
console.log(i);
}
})(i)
}
for(变量i=0;i<10;i++){
(职能(一){
对于(变量i=5;i<10;i++){
控制台日志(i);
}
})(一)
}
这将在它们自己的行上打印5、6、7、8、9 10次。“当在第二个循环中将i更改为classCt时,代码按预期工作”-那你为什么不继续呢?将i
更改为classCt
在哪里?第二个for循环中的i
实际上与第一个相同,因为你没有用var
再次初始化它。你是对的。在for
循环中声明的变量在循环终止后可见,因此范围不是rest对
循环本身的。@cYoung这是正确的,Javascript与其他一些语言不同,比如使用块作用域的C语言。它使用函数作用域(每个函数都有自己的作用域,并且有一个全局作用域)。这里有一个链接可以阅读更多内容:@Niko-think可以使用{}创建新的作用域block-这不是真的吗?@ccyoung不,这不是真的。正如Paul所解释的,只有函数才能在javascript中创建新的作用域。这一点很重要,因为这在很多其他语言(如Java或C)中都是不同的。请看这个提琴演示:@Niko从技术上讲,with
在某些情况下也足够了……但这不是推荐的ded:)但使用“var”是否会将作用域限制在函数上?如果是,如何在for循环中声明2个变量P