I have read, and discovered through my own experience, that JavaScript doesn\'t have a block scope. Assuming that the language was designed this way for a reason, can you ex
There are many reasons, but some that come to mind are to aid in parsing/debugging code that uses object literals (which can sometimes look like a block), and to simplify the garbage collection of local variables.
I hope that the promised support (discussed here, for example, http://esdiscuss.org/notes/2012-07-25) turns out to be real because it would be very convenient to use variables like i
that were local to only a single loop.
Converting my comment to answer
Choice of the creator: I tweeted Brendan and got the following answer:
@mplungjan 10 days did not leave time for block scope. Also many "scripting languages" of that mid-90s era had few scopes & grew more later.
That said, here are some relevant points:
Important: JavaScript prior to ECMAScript2015 (6th edition) does not have block scope. Variables introduced within a block are scoped to the containing function or script, and the effects of setting them persist beyond the block itself. In other words, block statements do not introduce a scope. Although "standalone" blocks are valid syntax, you do not want to use standalone blocks in JavaScript, because they don't do what you think they do, if you think they do anything like such blocks in C or Java.
we can artificially introduce scopes by creating new functions and immediately invoking them
let
and const
declared variables are hoisted but they are not initialized to undefined
in the same way var
is. Hence, referencing a let
or const
declared variable before its value is assigned raises a ReferenceError.
Redeclaration of the same variable in the same block scope raises a SyntaxError.
New answer as of 2015. ES6 does have block scope for variable definitions with the let
and const
keywords.
Block scope was not implemented for the following reasons:
if
statement. In languages like C you would have to declare the variable outside the if
statement and define it within the if
statement.