Javascript 嵌套函数中具有相同名称的变量
我正在读你不懂JS,下面的例子让我有点困惑: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
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
'si
。所以发生了这样的情况:
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),如下答案: