There is a very important difference between declaring a variable using var, or declaring it with let or const.
A variable defined as var inside a function is only visible inside that function, just like function parameters.
That’s it.
But a variable defined as const or let has an additional feature.
It is only visible inside the block where it is defined.
What is a block? A block is anything identified by a pair of curly braces.
Like a function, sure, and in this case there’s no difference from var (except for hoisting as we’ll later see).
But a block can also be a loop, or an if/else:
count = 12
if (count > 10) {
let text = "Bigger than 10!"
console.log(text)
}
console.log(text)
In the above example, text will give a ReferenceError: text is not defined error.
Try changing its declaration inside the if to var text, and you will see its value even outside of the if.
Again, it’s a matter of encapsulation, and this is one of the reasons why you should generally prefer, in my opinion, let and const declarations over var.
Lessons in this unit:
| 0: | Introduction |
| 1: | Global scope |
| 2: | Function scope |
| 3: | ▶︎ Block scope |
| 4: | Shadowing |
| 5: | Hoisting |
| 6: | Closures |
| 7: | An issue with `var` variables and loops |
| 8: | The event loop |