В for(var i = 0; i < 5; i++) функция должна писать в массив i, а пишет сразу 5. Почему?
Это основы основ JS. 
Вы пушите функции, которые позже используют переменную "i", а не примитив. Изучайте замыкания и области видимости. 
P.S. Через несколько лет можно будет использовать let (ES6), чтобы избежать такое.
Что-то с тостером произошло: были ответы, а сейчас - пропали...
Переписал пример:a = 2;
function ch(){
    alert("вызов именованной функции = " + a);
};
a = 3;
ch(); //3
иa = 2;
ch = function(){
    alert("вызов анонимной функции = " + a);
};
a = 3;
ch(); //3
Либо я не корректно пример с именованной функцией переписал, либо получается, что разницы между работой 
именованных и анонимных функций - нет. То есть выполняются тогда, когда их вызывают, а "интерпретатор сохраняет в памяти именованные функции" - значит что-то другое.