Это называется
immediately-invoked function expression, смысл в том, что в JavaScript функции создают область видимости, а блоки не создают со всеми вытекающими последствиями. Кстати, если непонятно, что это за последствия, возможно, вам стоит ознакомиться с областями видимости (англ. -- scope) подробнее. Вкратце можно посмотреть по ссылке, но вообще это очень важная тема.