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!"
자바스크립트 변수 선언에 대한 브라우저 호환성
변수 선언문
데스크탑 Chrome
Chrome
데스크탑데스크탑 Edge
Edge
데스크탑 Firefox
Firefox
Safari
Safari
var 1 12 1 1
let 49 14 44 10
const 21 12 36 5.1

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