Why the for loop counter doesn't get destroyed after exiting the loop in javascript?

前端 未结 3 526
北恋
北恋 2020-12-20 17:13
for(var i=0;i<5;i++){}
alert(i);

in javascript this will get us 5 other languages like C++, java, c# .... will simply give an error that the i v

相关标签:
3条回答
  • 2020-12-20 17:59

    This is because the JavaScript engine will move ("hoist") the variable decalaration to the top of the function no matter where it is declared inside the function1. JavaScript does not have block scope.

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

    Is equivalent to:

    {
      var i;
     //.. some code
     for(i=0;i<5;i++){}
        alert(i);
    }
    

    1 Unless it's the exception being caught with a catch clause; that variable is scoped to catch block.

    Update

    For defining block scope variables ecmascript 6 specs (javascript 1.7) introduces let. Currently this will work only in latest version of FireFox browser and in consensus stage.

    <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>
    

    Fiddle

    0 讨论(0)
  • 2020-12-20 18:03

    Javascript only creates scopes for functions, with and catch blocks (with functions creating a scope for var statement), so equivalent to Java (and not working) would be:

    (function(){
        for(var i=0;i<5;i++){}
    })();
    alert(i);
    
    0 讨论(0)
  • 2020-12-20 18:10

    Variables in Javascript are subjected to var hoisting where the variable becomes declared above the block by the javascript engine.

    See The Mozilla Javascript documents on var for an example of how this will work.

    0 讨论(0)
提交回复
热议问题