DynkanMaclaud,
В вашем примере, если посмотреть
var menu = $(".menu li");
alert(menu.length);
то увидим 3, тогда как в li прописываются значения 0,1,2
т.е. в вашем варианте ошибка тоже есть, только она маскируется исполняющей системой.
Код внешне отрабатывает чисто, сообщение об ошибке видно только в консоли.
Думаю, это не лучший стиль программирования - закладывать в коде ошибку в надежде на то, что система ее адекватно обработает, а потом ломать голову