Before reading this post, consider reading my earlier posts on hoisting and closures . They might give you some background information you’ll need to understand this post. I first stumbled across ES6 a few months after I had begun to learn . When I realized the syntax had changed, I felt frustrated. (This was before I had dipped my toe into the JavaScript framework ecosystem). I didn’t understand why JavaScript’s syntax needed to be updated. I hardly grasped using , and I suddenly had to learn and ? JavaScript var let const I was missing the point. and behave differently than . Their addition to JavaScript allows us to write more expressive, elegant, and cleaner code. let const var I wish someone had handed me a simple explanation of the difference between these three ways of declaring local variables. So I wrote one for you! var In ES5, developers declared local variables using . is scoped to the nearest function block. That means that the code below will not error out. Instead, it will return 5. var var const arr = [1, 2, 3, 4, 5]; for (var i = 0; i < arr.length; i++) { }; console.log(i) // 5 This happens because is scoped to the nearest function block, not the nearest enclosing block, so has access to it. i console.log(i) More importantly, That means I can assign a like and then later on in my program, I can change to . var can be reassigned after it’s initial definition. variable var language = "JavaScript" var language var language = "Ruby" let was introduced in ES6. It’s similar to , since it can be reassigned, but it’s scoped to the nearest enclosing block, not the nearest function block. let var That’s different from . If we use the same example from above, but replace with , we’ll see an error. var var let const arr = [1, 2, 3, 4, 5]; for (let i = 0; i < arr.length; i++) {}; console.log(arr[i]); // ReferenceError: i is not defined This happens because is scoped to the loop, not the function block. i for Let is great to use it whenever I’m defining a variable that I know I’m going to reassign. const I use when I’m not going to reassign a variable. Let’s look at our example once more: const const arr = [1, 2, 3, 4, 5]; for (let i = 0; i < arr.length; i++) {console.log(i)}; // 1 2 3 4 5 In the example above, is reassigned every time it loops through the loop. , on the other hand, is never reassigned, so I used . i for arr const Rule of Thumb Now that and are here to stay, I’d avoid using at all. Using and allow you to clearly express your intention. Expressiveness will lead to cleaner, more elegant code. let const var let const More Reading JavaScript ES6+: var, let, or const? Stack Overflow Post Simplified JavaScript: Hoisting