1. ホーム
  2. javascript

[解決済み] javascriptのグローバル変数とwindow.variableの違いは何ですか?

2023-06-20 16:22:59

質問

backbone.jsのドキュメントを読んでいると、windowオブジェクトに属性を割り当てるコードがたくさん出てくるのですが、これは何ですか?

window.something = "whatever";

このコードを呼び出すことと、このように変数を代入してグローバルなvarを作成することの違いは何でしょう。

something = "whatever";

スコープの違いやオブジェクトの所有権の違い(windowが所有者である場合とそうでない場合)があると思いますが、2つの間の詳細と、なぜwindowを使用する場合と使用しない場合の違いに興味があります。

どのように解決するのですか?

違いはありません。どちらも同じ効果です(ブラウザ上では window はグローバルなコンテキストである 1 ).

  • window.foo = "bar" プロパティを設定します。 foowindow .
  • foo = "bar" タイプミス または意図的にグローバルにしています。

誤字かどうかダブルチェックしなければならないので、個人的にはもっと 読みやすい を設定します。 window.foo を直接設定します。

また、ES5のストリクトモードでは foo = "bar" は不正な代入であるため foo が宣言されていないため、不正な代入となります。 Error .

編集してください。

コメントで指摘されているように foo = "bar" はスコープチェーンの上流で変数 foo で再割り当てします。 "bar" に再割り当てします。見つからなければ、新しいグローバル変数を作成します。

また window.foo = "bar" を使うと、オブジェクトにプロパティを割り当てているだけなので、削除する場合は delete window.foo .

ES5ストリクトモードでは 無効 から delete を変数に追加します。


1 node.js や Web Workers などの他の環境では、グローバルオブジェクトに別の名前がついていて window が全く存在しない場合もあります。Node.jsでは global を使用し、Web Worker では self .