выходит как-то так.
(function($){
$(function(){
//code here
});
})(jQuery);
1-ый вариант - когда нужно что бы код выполнялся только тогда, когда у нас готово DOM дерево. То есть документ сам догрузился и браузер завершил разбор дерева элементов. Так мы можем быть уверены что по нашему селектору нам вернут реально все доступные элементы и нету такого что что-то еще не догрузилось. Собственно $(function() {}) это полный аналог $(document).ready.
2-ой вариант является хорошей практикой для ограничения области видимости. То есть ваш код работает только с теми объектами, которые передали в замыкания. Профит в том, что можно безболезненно подменять переменные. Скажем передавать jQuery другой версии или что-то в этом духе и при этом у нас нету необходимости менять хоть что-то внутри замыкания. Собственно об этом уже много раз
спрашивалось и отвечалось