Потому что метод window.setTimeout принимает первым аргументом функцию, а вы предавали ее результат (и это не Function), если бы ваш Function MoveBlock не нужнался в аргументах, то вы бы написали просто
setTimeout(MoveBlock, 1000)
, но ему нужен аргумент поэтому пришлось замкнуть внутри анонимной функции-обертки ваш метод MoveBlock и его аргумент BlockID
function () {
MoveBlock(BlockID);
}
и передали ее setTimeout-у
Читать
Замыкания
setTimeout
setInterval
Основы программной анимации на Javascript