Javascript 为什么';I';更改其他函数中的嵌套循环?

Javascript 为什么';I';更改其他函数中的嵌套循环?,javascript,for-loop,Javascript,For Loop,我在我的代码中发现了一些奇怪的行为,并最终找到了我认为不可能的地方。 在for循环中使用的变量“i”在另一个函数的for循环中被改变 在这种情况下,函数a只记录0和函数b 0-9。我想要的行为是两个函数都记录为0-9 我在更改变量名“i1”和“i2”的代码中解决了这个问题。但我猜有一个更优雅的解决方案 function a() { for (i=0;i<10;i++) { // Changed to i1 console.log('a',i); b() ; }

我在我的代码中发现了一些奇怪的行为,并最终找到了我认为不可能的地方。 在for循环中使用的变量“i”在另一个函数的for循环中被改变

在这种情况下,函数a只记录0和函数b 0-9。我想要的行为是两个函数都记录为0-9

我在更改变量名“i1”和“i2”的代码中解决了这个问题。但我猜有一个更优雅的解决方案

function a() {

    for (i=0;i<10;i++) { // Changed to i1
    console.log('a',i);
    b() ; }

}

function b() {
    for (i=0;i<10;i++) { // Changed to i2
        console.log('b',i);
    }
}

a() ;
函数a(){

对于(i=0;i您正在将i添加到全局窗口对象中,其行为将与您预期的一样:

function a() {

    for (var i=0;i<10;i++) { // Changed to i1
    console.log('a',i);
    b() ; }

}

function b() {
    for (var i=0;i<10;i++) { // Changed to i2
        console.log('b',i);
    }
}

a();
函数a(){

对于(var i=0;i您正在将i添加到全局窗口对象,这将按照您的预期进行:

function a() {

    for (var i=0;i<10;i++) { // Changed to i1
    console.log('a',i);
    b() ; }

}

function b() {
    for (var i=0;i<10;i++) { // Changed to i2
        console.log('b',i);
    }
}

a();
函数a(){

对于(var i=0;i在声明局部变量时使用
let
。否则,正如其他人所提到的,
i
将变为全局变量

function a() {

    for (let i=0;i<10;i++) {
    console.log('a', i);
    b(); }

}

function b() {
    for (let i=0;i<10;i++) {
        console.log('b', i);
    }
}

a();
函数a(){

对于(让i=0;i在声明局部变量时使用
let
。否则,正如其他人所提到的,
i
将变为全局变量

function a() {

    for (let i=0;i<10;i++) {
    console.log('a', i);
    b(); }

}

function b() {
    for (let i=0;i<10;i++) {
        console.log('b', i);
    }
}

a();
函数a(){

for(设i=0;i有几个问题。一个是问题变量
i
应该在for循环中声明:

for (i=0;i<10;i++)

有几个问题。一个问题是变量
i
应该在for循环中声明:

for (i=0;i<10;i++)

使用<强> i <强>的方式导致JavaScript将其视为全局变量。默认情况下,其他语言可能具有“强> >I/St>Read”的局部变量,但JavaScript不这样工作。JavaScript是默认设计为全局变量的。可以将变量范围限制为函数。使用var,例如:

function a() {

    for (var i=0;i<10;i++) {
        console.log('a',i);
    b() ; }

}
函数a(){

对于(var i=0;i使用<强> i <强>导致JavaScript将其视为全局变量。默认情况下,其他语言可能具有“强> >I/St>Read”为缺省的for循环范围,但JavaScript没有这样工作。默认情况下,JavaScript设计为变量是全局的。具有var的函数,例如:

function a() {

    for (var i=0;i<10;i++) {
        console.log('a',i);
    b() ; }

}
函数a(){


对于(var i=0;i“将‘use strict’;放在每个Javascript文件的顶部”---现在是2019年,为什么不使用modules@zerkms哇,真的吗,对于OP-to模块,你知道OP是沙箱吗?@zerkms或者你只是找到了一个粗鲁的机会,用户喜欢是什么在一些圈子中给了这么坏的名声,傲慢自命不凡的人无所不知,同时你不关心OP在他对Javascri的研究中的位置第一件事,我并不想粗鲁,如果看起来是这样,我很抱歉(还有一个提示:你不需要回击别人,以防万一有误会,就像对别人来说英语不是第一语言,所以他们可能感觉不到一些音符)。这是一个真正的建议,使用的标准现在已经有5~4年的历史了,而不是00年代的标准。当你开始游戏“谁是最大的学究”时:“你正在向全局窗口对象添加i”-你怎么知道他们在有全局窗口对象的环境中运行JS?“将‘use strict’;放在每个Javascript文件的顶部"---现在是2019年,为什么不使用modules@zerkms哇,真的吗,对于OP-to模块,你知道OP是沙箱吗?@zerkms或者你只是找到了一个粗鲁的机会,用户喜欢是什么在一些圈子中给了这么坏的名声,傲慢自命不凡的人无所不知,同时你不关心OP在他对Javascri的研究中的位置第一件事,我并不想粗鲁,如果看起来是这样,我很抱歉(还有一个提示:你不需要回击别人,以防万一有误会,就像对别人来说英语不是第一语言,所以他们可能感觉不到一些音符)。这是一个真正的建议,使用的标准现在已经有5~4年的历史了,而不是00年代的标准。当你开始游戏“谁是最大的学究”时:“你正在向全局窗口对象添加i”-你怎么知道他们在有全局窗口对象的环境中运行JS?“设计为脚本语言,因此默认情况下所有变量都是全局变量"---作为脚本语言和作用域规则之间没有任何联系。嗯。好吧,我可能错了。这似乎是脚本语言倾向于做的事情。我将进一步研究这一点,并进行相应调整。Python是脚本语言,而不是脚本语言。php是脚本语言,而不是脚本语言。好的。我已经编辑了con语句将作用域连接到脚本语言状态。“设计为脚本语言,因此默认情况下变量都是全局变量”---作为脚本语言和作用域规则之间没有任何联系。嗯。好吧,我可能错了。这似乎是脚本语言倾向于做的事情。我将进一步研究这一点,并进行相应调整。Python是脚本语言,而不是脚本语言。php是脚本语言,而不是脚本语言。好的。我已经编辑了con语句将作用域连接到脚本语言状态。感谢大家的回答。感谢大家的回答。