function example() {
    for (var i = 0; i < 5; i++) { // var変数を使用しました
        setTimeout(function() {
            console.log(i);
        }, 1000);
    }
}

example();
コンソールに出力された様子 期待される結果は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で詳しい情報をご確認ください。