一方num2はローカル変数で、宣言した関数内でしか使用できません。 関数fnc2()ではnum2が使えないのでエラーになり、 アラートが表示されません。 関数内でもvarを使わずに変数を記述すると、グローバル変数になります。 つまり、varを使わないと必ずグローバル変数になってしまうので、関数の外で宣言した変数「item」と同じになってしまうのです。このような意図しない動作にならないよう、基本的にはvarを付けて変数を宣言するようにしましょう! 変数の型を自動判別する. グローバル変数 x を宣言しない事は勿論、x に不正な値が代入されないように注意しなければなりません。 > クロージャーの利点はグローバル変数を使わずにコードがかけると認識しているのですが、 それも利点の一つですが、本質ではないと思います。 グローバル変数は多用してしまうと、とにかく管理が大変だからです。 どの変数がどの振る舞いをして、何に使われて・・・。名前も被らないようにしないといけません。 ほぼ全ての変数がグローバルだった場合、本当に管理が大変なことになります。