Почему выводится число, а не undefined?
Может быть этот материал разъяснит эту ситуациюдля каждой переменной (var)
– создаётся свойство VO с именем переменной, и значением undefined; если в VO уже присутствовало свойство с таким именем, оно остаётся нетронутым. 
Так откуда же возьмется undefined?
Ведь ваш код принципиально ничем не отличается от такого:var foo = i;
console.log(foo);
Код в большинстве ЯП разбирается справа налево. Локальная переменная и аргумент - две разных области памяти, поэтому одна не затирает другую.