グローバルオブジェクトwindow, this

by s_hiroshi

JavaScript

// ブラウザのグローバルオブジェクトはwindow
// thisはwindowを指す
console.log(this === window); // true

// JavaScriptはPHPのようなglobalキーワードを持たない
// トップレベルの変数はグローバルな変数になる
// console.log(global); global is not defined
// エミュレート
var global = this;
console.log(global === window); // true

// 下記はどちらともグローバルオブジェクトwindow,thisのプロパティ
// 両者はほとんど同じだが違いもある
// 1. 変数宣言は巻き上げ処理が行われる(関数式でも)
// 2. var付きはグローバルオブジェクトのプライベート変数で外部からアクセスできない
this.hoge = function(value) {
    return value;
};
// varなし変数宣言
foo = function(value) {
    return value;
};
// varあり変数宣言 グローバル変数window, thisを通して呼び出すことができない。
var bar = function(value) {
    return value;
}
console.log(this.hoge('Hoge'));         // Hoge
console.log(window['hoge']('Hoge'));    // Hoge
console.log(this.foo('Foo'));           // Foo
console.log(window['foo']('Foo'));      // Foo
// console.log(this.bar('Bar'));        // this.bar is not a function
// console.log(window['bar']());        // window.bar is not a function