Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.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 嵌套函数中具有相同名称的变量_Javascript - Fatal编程技术网

Javascript 嵌套函数中具有相同名称的变量

Javascript 嵌套函数中具有相同名称的变量,javascript,Javascript,我正在读你不懂JS,下面的例子让我有点困惑: function foo () { function bar (a) { i = 3; // changing the `i` in the enclosing scope's for-loop console.log(a + i); } for (var i = 0; i < 10; i++) { bar(i * 2); // oops, infinite loop a

我正在读你不懂JS,下面的例子让我有点困惑:

function foo () {
    function bar (a) {
        i = 3; // changing the `i` in the enclosing scope's for-loop
        console.log(a + i);
    }

    for (var i = 0; i < 10; i++) {
        bar(i * 2); // oops, infinite loop ahead!
    }
}

foo();
函数foo(){
功能条(a){
i=3;//更改封闭作用域for循环中的'i'
控制台日志(a+i);
}
对于(变量i=0;i<10;i++){
棒(i*2);//哎呀,前面是无限循环!
}
}
foo();
引擎不会在for循环中查找(并坚持赋值)i,因为它是声明的并且在
foo
的范围内吗

为什么它会进入酒吧的
i


此外,即使
i
的值被重新分配到3,它不是每次都会上升一个,从而避免了无限循环吗?

Javascript有提升的概念。。您可以在声明变量之前使用它们。在执行代码之前,javascript会将所有声明变量的语句置于顶部,从而使for和bar中的i的作用域相同


您可以在这里阅读有关提升的内容

Javascript有提升的概念。。您可以在声明变量之前使用它们。在执行代码之前,javascript会将所有声明变量的语句置于顶部,从而使for和bar中的i的作用域相同


您可以在这里阅读有关提升的内容

,因为
i
不是用
var
声明的,它使用它可以在外部范围中找到的第一个
i
foo
i
。所以发生了这样的情况:

  • for
    循环将
    i
    设置为
    0
  • bar(0)
    i
    设置为
    3
  • for
    循环将
    i
    3
    增加到
    4
  • bar(8)
    i
    设置为
    3

  • 步骤3和4无休止地重复,因为
    i因为
    bar
    i
    不是用
    var
    声明的,所以它使用可以在外部范围中找到的第一个
    i
    foo
    's
    i
    。所以发生了这样的情况:

  • for
    循环将
    i
    设置为
    0
  • bar(0)
    i
    设置为
    3
  • for
    循环将
    i
    3
    增加到
    4
  • bar(8)
    i
    设置为
    3

  • 第3步和第4步无休止地重复,因为
    i
    内部
    bar()
    foo()的
    i
    内部
    i
    内部
    bar()
    foo()的
    i
    内部
    相同,谢谢。但是,如果执行是从上到下的(异步等除外),for循环不会重写i的值吗?对不起,我正试图绕着它转。@HernanAriel的执行不是自上而下的。每句话后面通常跟着下一句。但是函数会导致执行跳转到其他地方,
    for
    循环会导致执行跳转到
    for
    循环的顶部。。。
    for
    循环不记得它得到了什么数字;它只是将
    1
    添加到
    i
    的当前值中,然后检查它是否小于
    10
    。我可以告诉你,你是编程新手。我可以建议从比JavaScript更理智的语言开始吗?像Python 3?我的意思是,JavaScript是我最早使用的语言之一,但在此之前我把批处理和Scratch弄得一团糟,所以我对这些概念有了大致的了解。JavaScript有很多。。。哈哈哈,我想进入网络开发领域,所以我真的无法避免Javascript。那么,总而言之,变量在赋值之前被提升(声明)了吗?(这就是为什么bar i与for循环中的i相同)。最后一个问题:for循环是否也被提升?谢谢@wizzwizz4,我瘦在你回答的第四步,需要吧(8),像这样回答:谢谢。但是,如果执行是从上到下的(异步等除外),for循环不会重写i的值吗?对不起,我正试图绕着它转。@HernanAriel的执行不是自上而下的。每句话后面通常跟着下一句。但是函数会导致执行跳转到其他地方,
    for
    循环会导致执行跳转到
    for
    循环的顶部。。。
    for
    循环不记得它得到了什么数字;它只是将
    1
    添加到
    i
    的当前值中,然后检查它是否小于
    10
    。我可以告诉你,你是编程新手。我可以建议从比JavaScript更理智的语言开始吗?像Python 3?我的意思是,JavaScript是我最早使用的语言之一,但在此之前我把批处理和Scratch弄得一团糟,所以我对这些概念有了大致的了解。JavaScript有很多。。。哈哈哈,我想进入网络开发领域,所以我真的无法避免Javascript。那么,总而言之,变量在赋值之前被提升(声明)了吗?(这就是为什么bar i与for循环中的i相同)。最后一个问题:for循环是否也被提升?谢谢@wizzwizz4,我在你答案的第四步中,需要是条(8),如下答案: