Functionオブジェクト

JavaScriptにおいて、関数はオブジェクトになっています。

function a() {
  alert("hello");
}
こう書けますが、下のように書くこともできます。
var a = function () {
  alert("hello");
};
これは、関数は代入可能なオブジェクトであることを示しています。 そして、このように代入した変数aは、その後ろに「()」を記述することで関数本体を実行することができます。 つまり、次のような使い方ができます。
a(); //実行
<input type="button" value="a()"        onclick="a()"     > 

<input type="button" value="alert(a)"   onclick="alert(a)"> 
そして、関数は次のようなことができます。 上記の【3】で示したことは、 関数自身が定義された環境を、ローカル変数も含めて持ち運ぶことのできることを意味しています。
この仕組み (またはそうした関数自体) のことをクロージャと呼ばれます。
以下で、クロージャが確認できる例を示します。

上記は、「ボタンを押すたびに数値が1, 2...と増加し、それをアラートで表示する」ものです。

上記の『onclick='alert(sub2())'』を
右記の『onclick='alert( sub2 )'』に変更して動作を確認してみましょう。
(javascript の変数や関数の取り扱いが少し分かるかも・・・)

Function の中では、 arguments という変数が使えて、 これは 関数を呼び出した時の引数を配列として参照できるようになっています。
function sub1(){
	alert(arguments[0]);	//「123」を表示
	alert(arguments[1]);//「abc」を表示
	alert(arguments.length);//「2」を表示
}
var sub2 = sub1(123,"abc");