8

ブラウザで Web サイトを表示するたびに、javascript のインスタンスが実行されています。また、コンソール (DevTools) でグローバル変数を宣言できます。

var a = 1234567890; 

この変数はグローバルスコープで宣言されているため、変数の値を取得できます。

> a 
1234567890

ただし、これも実行できます。

> window.a 
1234567890 

windowオブジェクトは、ブラウザ上の Web サイト インスタンス内のすべてのグローバル変数を含むオブジェクトであると正しく理解していますか? その場合、window オブジェクトはどのスコープに属しますか? これは私を少し混乱させます。

> window 
Window {top: Window, window: Window, location: Location, external:, ...}  
> window.window 
Window {top: Window, window: Window, location: Location, external:, ...}  
> window.window.window 
Window {top: Window, window: Window, location: Location, external:, ...}  

そのwindowオブジェクトは究極のグローバル オブジェクトであり、windowそれ自体を参照するという名前のオブジェクトがありますか?

4

3 に答える 3

15

そのwindowオブジェクトは究極のグローバル オブジェクトであり、windowそれ自体を参照するという名前のオブジェクトがありますか?

はい、はい。たとえば、これは次を返しますtrue

window.window.window.window.window === window.window;

興味がある場合は、windowオブジェクトのすべてのプロパティ (したがってすべてのグローバル変数)のリストを取得できObject.keysます。

console.log(Object.keys(window));

ただし、グローバル変数について考えるのに時間をかけすぎている場合は、コードのアーキテクチャに問題がある可能性があることに注意してください。

于 2013-11-08T09:46:17.140 に答える
4

はい、windowオブジェクトは

グローバル オブジェクト(§15.1 ES5 仕様)

一意のグローバル オブジェクトは、制御が実行コンテキストに入る前に作成されます。

特に指定しない限り、グローバル オブジェクトの標準の組み込みプロパティには属性 {[[Writable]]: true、[[Enumerable]]: false、[[Configurable]]: true} があります。

グローバル オブジェクトには [[Construct]] 内部プロパティがありません。new 演算子でグローバル オブジェクトをコンストラクタとして使用することはできません。

グローバル オブジェクトには [[Call]] 内部プロパティがありません。グローバル オブジェクトを関数として呼び出すことはできません。

グローバル オブジェクトの [[Prototype]] および [[Class]] 内部プロパティの値は、実装に依存します。

この仕様で定義されたプロパティに加えて、グローバル オブジェクトには追加のホスト定義プロパティが含まれる場合があります。これには、値がグローバル オブジェクト自体であるプロパティが含まれる場合があります。たとえば、 HTML ドキュメント オブジェクト モデルでは、グローバル オブジェクトのウィンドウ プロパティはグローバル オブジェクトそのものです。

于 2013-11-08T09:47:23.353 に答える
1

すべてのグローバル変数は、window オブジェクトのプロパティになります。

>>> window.somevar = 1;
1
>>> somevar
1

また、主要な JavaScript 関数はすべてwindow オブジェクトのメソッドです。

于 2013-11-08T09:47:08.300 に答える