|
|
|
|
|
by zawerf
2815 days ago
|
|
ES5 has a lot of interesting hoisting bugs. For example this doesn't print what you expect: for (var i = 0; i < 3; i++) {
var text = 'number ' + i;
setTimeout(function() {
console.log(text);
}, i * 1000);
}
But flipping var to let will fix it. The bug is that var is not block-scoped so everything refers to the same `text` variable which gets mutated by the next iteration.I was hoping their demo would be good for explaining this bug but it seems to be broken. |
|
variables in javascript are not block scoped, but functionally scoped.
the let keyword introduces block scope to javascript.