私が試した他のブラウザ (Chromium、IE、Safari など) では、コンソールで実行されるコードのデフォルトのスコープ (関数の外側) は、<script>
. つまり、はオブジェクトthis
を参照し、window
新しく宣言された変数はすべてグローバル (および、同等にwindow
オブジェクトのプロパティ) になります。
Firefox では...何か他のことが起こりますが、何が原因かわかりません。ほとんどのブラウザーでは、Chrome コンソールでthis === window
評価されますtrue
が、Firefox では false です。this.window === window
ただし、Firefox では当てはまります。window
このため、コンソールを介して新しく宣言または割り当てられた変数は、オブジェクトの属性として明示的に割り当てない限り、ページ上で実行されているスクリプトには表示されません。
奇抜さはそれだけにとどまりません。オブジェクトへの割り当ては、window
魔法のように Firefox コンソールのスコープ内の変数を伝播して変更しますが、その逆は当てはまりません。例:
window.foo = 5;
console.log(foo); // 5
console.log(this.foo); // 5
console.log(window.foo); // 5
foo = 10;
console.log(foo); // 10
console.log(this.foo); // 10
console.log(window.foo); // 5 -- in any other browser, this would be 10
舞台裏で何が起こっているのですか?Firefox で参照されている謎のオブジェクトとは何ですか?this
また、オブジェクトとこの奇妙な関係があるのはなぜwindow
ですか? これはどこかに文書化されていますか?
(念のため、私は Firefox 19.0.2 でこのようなことを経験しました。他の Firefox バージョンはテストしていません。)