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 の説明