function example() {
    for (var i = 0; i < 5; i++) { // var 변수를 사용했습니다.
        setTimeout(function() {
            console.log(i);
        }, 1000);
    }
}

example();
console에서 출력된 모습 예상한 결과는 0부터 4까지 순서대로 출력되어야 하지만, 실제로는 5가 5번 출력됩니다.
function example() {
    for (let i = 0; i < 5; i++) { // let 변수를 사용했습니다.
        setTimeout(function() {
            console.log(i);
        }, 1000);
    }
}

example();
콘솔에서 출력된 모습 예상한 결과인 0부터 4까지 순서대로 출력됩니다.
var name = "John";
console.log(name); // "John"

var name = "Jane";
console.log(name); // "Jane"
console.log(name); // undefined
var name = "John";
var name = "John"; // 전역 변수로 name을 선언

function greet() {
    console.log("Hello, " + name + "!");
}

function changeName() {
    name = "Jane"; // 전역 변수 name의 값을 변경
}

greet(); // "Hello, John!"
changeName();
greet(); // "Hello, Jane!"

caniuse.com에서 더 자세한 정보를 확인해 보세요.