Javascript:varの有無の違い

明けましておめでとうございます。元日から、こちらの本でJavascriptの勉強をしています:

本日は4.3章。変数を宣言するときに、varがあろうがなかろうが一緒かと思っていたのですが、全然違うことを知りました:

var language = 'Japanese';

function getLanguage() {
  var language = 'English';
  return language;
}

console.log(getLanguage());
console.log(language);

と実行すると、

English
Japanese

とコンソールに出力されますが、varを取ると:

var language = 'Japanese';

function getLanguage() {
  language = 'English';
  return language;
}

console.log(getLanguage());
console.log(language);
English
English

になります。変数を宣言する際、varを用いるとそのスコープは定義した場所(この場合は関数内)になりますが、 varを省略するとグローバルスコープになります。

グローバル変数の意図しない参照・上書きによる不具合を防ぐためにも、 変数を宣言する際は必ずvarを用いましょう、ということですね。

後日談

いまこの記事をみていて「自分で全然勉強不足だなぁ」と思うだけでなく、 varを割愛したらグローバルスコープの変数を参照するのは当たり前では?と思いました。 まだまだ全然ダメですね…