web-dev-qa-db-ja.com

JavaScriptのグローバル変数とウィンドウ変数とは何ですか?

これらのステートメントはW3Schoolsで見つかりました。

JavaScriptでは、グローバルスコープは完全なJavaScript環境です。HTMLでは、グローバルスコープはウィンドウオブジェクトです。すべてのグローバル変数はウィンドウオブジェクトに属します。グローバル変数(または関数)はウィンドウ変数(または関数)を上書きできます)

これらのステートメントは、グローバル変数とウィンドウ変数が基本的に同じであることを意味しませんか?また、ウィンドウオブジェクトに関連付けられているか、別のウィンドウに移動するとウィンドウオブジェクトが削除されるため、別のウィンドウからウィンドウ変数にアクセスできますか?

そしてこれも:

ウィンドウオブジェクトを含むすべての関数は、グローバル変数と関数を上書きできます。

そして関連する例として:

<p>
In HTML, all global variables will become window variables.
</p>

<p id="demo"></p>

<script>
var carName = "Volvo";

// code here can use window.carName
document.getElementById("demo").innerHTML = "I can display " + window.carName;
</script>

ウィンドウオブジェクト/変数とは何ですか?それはグローバルオブジェクト/変数とどう違うのですか?

私は本当に混乱しています。誰でも例を挙げてこれを詳しく説明できますか?

7
b.g

すべてのJavaScriptコードは、一部の環境で、最も一般的にはブラウザーで実行されます。実行されるコードは、グローバルコンテキストまたはグローバルスコープ(メインコンテナーと考え​​る)と呼ばれる「ルート」スコープで実行する必要があります。ブラウザでは、この「ルート」スコープはウィンドウオブジェクト(タブ/ページ/ iframeごとの一意のウィンドウオブジェクト)です。

そのため、この例では、変数がグローバルスコープvar carName = "Volvo";で宣言されると、ウィンドウオブジェクトwindow.carNameでこの変数にアクセスできます。これは、ブラウザーでは「ウィンドウ」オブジェクトがグローバルオブジェクトだからです。

Nodeたとえば、グローバルオブジェクトの名前はglobalと非常に適切です。この環境でvar carName = "Volvo";を宣言すると、global.carNameを使用して変数にアクセスできます(これはnodejs REPLではtrue、ファイル内のvar宣言はglobalオブジェクトにアタッチされません)。

詳しく説明するには:

var myObject = { };
myObject.myVariable = 1;
console.log(myObject.myVariable); // logs 1

myVariableはmyObjectで作成されます。これは明示的に行われます。

var myVariable = 1; // behind the scenes this declerations is doing window.myVariable = 1;
console.log(window.myVariable); // logs 1

myVariableは、ブラウザーのコンテキストではグローバルオブジェクトであるwindowオブジェクトに暗黙的に作成されます。

これで状況が明確になればいいのですが。

多分より良い説明のために、私はこの本シリーズを強くお勧めします https://github.com/getify/You-Dont-Know-JS 特にこの質問のために https://github.com /getify/You-Dont-Know-JS/blob/master/scope%20&%20closures/README.md#you-dont-know-js-scope--closures

7