JavaScript and Scope IV - Blocks
June 7, 2019 • 2 min read
In JavaScript and Scope articles I - Intro, II - Functions, and III - Arrow Functions we looked at scope and functions. What about other statements that use blocks? Blocks being sections of code enclosed by curly brackets {}
.
For example, we often declare variables in a for
loop with a block.
var buzz = 3;
for (var buzz = 1; buzz < 10; buzz++) { if (buzz === 9) {
console.log('for loop buzz:', buzz); // logs 9
}
}
console.log('global scope buzz:', buzz); // logs 10
When you run the code above, you'll see there is only one buzz
variable. The one declared in the global scope. The for
loop changes the global variable. The buzz
variable will have a value of 10
when the last console.log
runs.
What about if
statements?
var cute = 'not';
if (true) {
var cute = 'cat';}
console.log(cute); // logs 'cat'
Again, there is only one cute
variable and the final value of the variable in the global scope will be 'cat'
. The re-declaration of the variable inside the block does not create a new scope and variable.
Both of the examples above are the opposite of what we saw for functions. Functions create a new scope for variables. Blocks do not create a new scope for variables declared with var
.
Did you know you can declare blocks all on their own without using an if
or for
statement or anything else? I will leave you with this one final very simple example to help you memorize the rule: blocks do not create a new scope for variables declared with var
.
var toto = 'wants';
{
var toto = 'a puppy';
}
console.log(toto); // logs 'a puppy'