var b = 1; //Это глобальная переменная b
var a = 2; //Это глобальная переменная a
console.log(a, b); // 2, 1
(function() {
var a = 3; //тут объявляется переменная a внутри функции
b = 4; // тут нет объявления переменной b, поиск переменной идет сначала внутри функции, если ее нет, то ищем ее вне границ функции и находим. Но если бы мы ее и там не нашли, то была бы ошибка "Переменная не объявлена"
})(); //Функция сразу запускается, результатом ее выполнения будет глобальная a =2 (не измен) и глобальная b = 4 (изм)
console.log(a, b); // 2, 4
if (a == 2){
var a = 5; //так как глобальная a осталась равна 2, то условие сработает и a приравняется 5. Точнее она переопределится здесь. Условие выполняется в рамках глобальной области видимости.
}
console.log(a, b); // 5, 4