技術メモのかけら

内容はもとより調べたことすら忘れてしまうので個人的なメモです。とにかく短く、結論だけ書いていきます。

グローバル変数とグローバルプロパティ

まず、グローバル変数とは関数の外で定義した変数のこと。

var hoge = "huga";

ブラウザ環境ではグローバルオブジェクトのwindowに変数として登録される。
windowは省略できるので、この2行はどちらも同じ結果になる。

console.log(hoge);
console.log(window.hoge);

こんどはグローバルプロパティ。
varなしで宣言するとグローバルプロパティになる。
あえて使うことは少ないと思うが、関数内で宣言してもグローバル汚染するので注意が必要。

hoge = "hoge";

グローバル変数との違いはdeleteで削除可能なこと。

delete hoge;

最近のブラウザではuse strictを宣言するとグローバルプロパティが使えないようである。

"use strict";

ただ、宣言の行ではエラーにならずアクセスしたタイミングでReferenceErrorにようだ(chromeでしか試してないが)。

Uncaught ReferenceError: hoge is not defined