为什么for循环计数器不';退出javascript中的循环后不会被破坏? for(var i=0;i

为什么for循环计数器不';退出javascript中的循环后不会被破坏? for(var i=0;i,javascript,Javascript,这是因为JavaScript引擎会将变量deparation移动(“提升”)到函数的顶部,无论它在函数1中的哪个位置声明。JavaScript没有块作用域 for(var i=0;i<5;i++){} alert(i); Javascript中的变量受到var提升的约束,其中该变量由Javascript引擎在块上方声明 有关如何工作的示例,请参见。Javascript仅为函数创建作用域,使用和捕获块(函数为var语句创建作用域), 因此,与Java()等价的是: <script t

这是因为JavaScript引擎会将变量deparation移动(“提升”)到函数的顶部,无论它在函数1中的哪个位置声明。JavaScript没有块作用域

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

Javascript中的变量受到
var提升
的约束,其中该变量由Javascript引擎在块上方声明


有关如何工作的示例,请参见。

Javascript仅为函数创建作用域,
使用
捕获
块(函数为
var
语句创建作用域), 因此,与Java()等价的是:

<script type="application/javascript;version=1.7">
     //Some code

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

            alert(i); // 1, 2, 3, 4 ... 9
        }

        alert(i); // Here you will get an error here saying ReferenceError: i is not defined.
    }
</script>
(函数(){

对于(var i=0;i可能重复您需要知道的所有内容,谢谢,这些链接真的很有帮助。请阅读:否,它还为
catch
子句创建作用域。@torazaburo true,容易忘记:)@torazaburo它为包含catch异常(在catch子句中定义)的变量创建作用域,但它并没有为catch块中定义的变量创建一个通用范围,对吗?()我相信这个答案是错误的..你是对的,catch子句中定义的变量和其他变量一样被提升到函数的顶部,它是在它自己的小上下文中捕获的变量。抱歉,有任何混淆。我应该说否,它还为
catch
子句中捕获的变量创建一个作用域。“@user1525337不客气。也许你读过这篇关于scopes的文章-+好吧,这就是
JavaScript没有block语句作用域的原因;
现在明白了,我没有先读你的答案,但它是非常有用的答案。也许你应该修改你的第一句话,因为它让你觉得如果不是为了提升的话,这会起作用。
{
  var i;
 //.. some code
 for(i=0;i<5;i++){}
    alert(i);
}
<script type="application/javascript;version=1.7">
     //Some code

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

            alert(i); // 1, 2, 3, 4 ... 9
        }

        alert(i); // Here you will get an error here saying ReferenceError: i is not defined.
    }
</script>
(function(){
    for(var i=0;i<5;i++){}
})();
alert(i);