Javascript 为什么';I';更改其他函数中的嵌套循环?
我在我的代码中发现了一些奇怪的行为,并最终找到了我认为不可能的地方。 在for循环中使用的变量“i”在另一个函数的for循环中被改变 在这种情况下,函数a只记录0和函数b 0-9。我想要的行为是两个函数都记录为0-9 我在更改变量名“i1”和“i2”的代码中解决了这个问题。但我猜有一个更优雅的解决方案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() ; }
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语句将作用域连接到脚本语言状态。感谢大家的回答。感谢大家的回答。