Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.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 为什么java脚本嵌套了循环计数器名称相同的循环_Javascript - Fatal编程技术网

Javascript 为什么java脚本嵌套了循环计数器名称相同的循环

Javascript 为什么java脚本嵌套了循环计数器名称相同的循环,javascript,Javascript,以下代码将输出什么内容 for(var i=0; i<5; i++){ for(var i=0; i<3; i++){ console.log(i + ' ' + i); }} for(var i=0;i这是因为您使用i两次,因此每次进入第二个循环时,您都会将i重置为0 您的代码应该是: for(var i=0; i<5; i++){ for(var j=0; j<3; j++){ console.log(i + ' ' + j); }}

以下代码将输出什么内容

for(var i=0; i<5; i++){
  for(var i=0; i<3; i++){
    console.log(i + ' ' + i);
  }}

for(var i=0;i这是因为您使用
i
两次,因此每次进入第二个循环时,您都会将i重置为0

您的代码应该是:

for(var i=0; i<5; i++){
  for(var j=0; j<3; j++){
    console.log(i + ' ' + j);
  }}

for(var i=0;i因为外部循环的每次迭代,内部循环都会将i重置为0。它永远不会达到5

for(var i=0; i<5; i++){
  // will be 4 here then reset to 0 it will only ever make it to 4 never reach 5.
  for(var i=0; i<3; i++){
    console.log(i + ' ' + i);
  }}

for(var i=0;i这是因为当你用0进入第一个循环时,你将i重置回0,当你的i变为3时,你从内部循环出来,输入4的外部循环,然后再次重置为0,进入一个循环

您可以使用以下两个不同的变量来解决此问题:

for(var i=0; i<5; i++) {
    for(var j=0; j<3; j++) {
        console.log(i + ' ' + j);
    }
}

for(var i=0;i由于
var
声明将被提升到作用域的顶部(我不打算详细说明原因),因此代码最终将如下运行:

var i;
for(i = 0; i < 5; i++
{
    for(i = 0; i < 3; i++)
    {

    }
}
vari;
对于(i=0;i<5;i++
{
对于(i=0;i<3;i++)
{
}
}
您认为一个远循环会创建一个新的“代码块”(作用域),但事实并非如此。 如果你要这样做:

for(var i = 0; i < 5; i++)
{
    +function() {
        for(var i = 0; i < 3; i++
        {

        }
    }();
}
for(变量i=0;i<5;i++)
{
+函数(){
对于(var i=0;i<3;i++
{
}
}();
}
那么wya就可以工作了,你认为它现在可以工作了,但是你不应该。你应该只使用两个不同的变量

1st iteration of loop #1
    starts with i = 0
    1st iteration of loop #2
        starts with i = 0
        ends with i = 1
    2nd iteration of loop #2
        starts with i = 1
        ends with i = 2
    3rd iteration of loop #2
        starts with i = 2
        ends with i = 3
    ends with i = 4
2nd iteration of loop #1
    starts with i = 4
    1st iteration of loop #2
        starts with i = 0
        ends with i = 1
    2nd iteration of loop #2
        starts with i = 1
        ends with i = 2
    3rd iteration of loop #2
        starts with i = 2
        ends with i = 3
    ends with i = 4
3nd iteration of loop #1
    starts with i = 4
    1st iteration of loop #2
        starts with i = 0
        ends with i = 1
    2nd iteration of loop #2
        starts with i = 1
        ends with i = 2
    3rd iteration of loop #2
        starts with i = 2
        ends with i = 3
    ends with i = 4

没完没了地;)

它甚至可以编译吗?@Ludovic:是的,浏览器会挂起一段时间。它是无限的,因为你会覆盖内部的i变量loop@ozil我没有看到它是javascript。这种语言允许太多语法。为什么不在第二个循环中使用
j
?每次进入第二个循环时,您的
i
都会重置为0@Ludovic“这种语言允许太多语法”,因为其他语言的循环方式如此不同?哈哈