ECMAScript はホスト環境内に存在する言語

以下は、「Web/JavaScript 講習会 part.6 (ホスト環境、オブジェクト、this、環境) — ディノオープンラボラトリ」で自分が気になった部分を抜き出したもの。上のエントリの続きみたいなもの。

Ecma-262 chap.4 の引用らしい(未確認)
host facilities are provided by objects
ホストの機能群はオブジェクトによって提供されます

an ECMAScript program is a cluster of communicating objects.
ECMAScript program はコミュニケーションしているオブジェクトの集合です

ECMAScript is an .. language .. within a host environment.
ECMAScript はホスト環境内に存在する言語です


ブラウザをホスト環境と考えると、
「 host environment = Browser」
さらに、
「Browser = グローバルオブジェクト(window オブジェクト)」
とすると、
普段書いているプログラムはグローバルオブジェクト(ブラウザ)の中で動いていると考えられる。


本当にグローバルオブジェクトの中で動いているなら、いきなり(一番外側で)this を書くと this = グローバルオブジェクトになるハズ。そこで Firebug で実験。ブラウザのグローバルオブジェクトは通常 window オブジェクトなのでこいつと this を比べることにする。

// this が何か見てみる
console.log(this.toString());
// スクリプトを実行しているアプリ(ここではブラウザ)の情報を見る
console.log(this.navigator);
// this がグローバルオブジェクトになっているか確かめる
console.log(this == window);

// 結果
[object Window]
Navigator
true


「console.log(this == window);」 の結果が true になったので、JavaScript のコードはグローバルオブジェクトの中で実行されていることが確認できた。


だけど、そういうことは、JavaScript がブラウザ(ホスト環境)の実装に大きく影響を受けるのは当たり前なのかな?ホスト環境が変わる=グローバルオブジェクトが変わる(可能性がある)ということだし…。

参考

Ecma-262
Window.navigator - Web API interfaces | MDN:window.navigator の説明