$(function(){})で囲む理由

$(function(){})

で囲むと、全てのDOM要素が読み込まれた後に実行されるそうです。

Node.js + Express + socket.io で、入力に応じて画像を返す.md · GitHub

 

似ているものに即時実行関数があります。
(function(){})など、カッコで全体を囲んでいるものです。
javascriptでは複数のモジュールを読み込んだときに名前空間が共有されますが、即時実行関数を適用すればスコープになるので変数名がぶつからないという利点があります。
また、グローバル変数とならないのでメモリがすぐに解放されます。なので初期化に使われます。
しかし、ES6でletやconstがブロックスコープとなったので出番は減りました。