GiGs said: const and let are both within the block scope, whereas var is hoisted to the start of the function. Note: this only applies to initialisations, not declarations. If you do var x; that will be hosited, but if you do var x = 7; that will not be hoisted. The first is an initialisation , the latter is a declaration . I think you have those backwards, GiGs... the declaration is introducing the new thing ( var x , your first example). Initialization (or, initialisation, if you simply must) would be to give it its first value ( var x = 7 ). To put a fine point on it, though, the second example is both declaring and initializing the variable. The declaration is hoisted, but the initialized value is not: console.log(x); // undefined var x = "hoocha hoocha hoocha, lobster"; console.log(x); // "hoocha, hoocha, hoocha, lobster" Compare that to the same three statements, but replacing var with let. You'll get a "can't reference 'x' before initialization" error.