私が試した他のブラウザ (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 バージョンはテストしていません。)