In many languages such as C, C++, and Java, the scope is defined by a block. In the following Java example, the variable x in the inner scope is not accessible by outer scope.
for(int i=0;i<10;++i) { int x = 1; } System.out.println(x); // error
However, in Javascript, scope is defined by a function.
In the following sample, variable x is defined in the loop block which doesn't create a new scope while variable y is defined in a function which create a new scope. So, The foo function is in inner scope and global window is in outer scope.
Since variable x is in the outer scope, the function foo is able to access it. And variable y is in the inner scope, we can't access it in outer scope (window).
var i; for(i = 0; i < 10; ++i) { var x = 1; } // function will create a new scope function foo() { var y = 1; x++; } console.log('x', x); // 1 foo(); console.log('x', x); // 2 console.log('y', y); // Uncaught ReferenceError: y is not defined