8

ウェブページにいくつかの初期化コードを追加しているwindow.onload = ...ときに、思いついたとき、何度も書いていることに気づきました。

は現在のオブジェクトwindow.であるため、必要ありません。windowなので任意です!
しかし、誰も公正onload = ...に書いているわけではありません。

つまり、修飾子alertなしなど、他のことを書くことに何の不安もありません。window.

window.onload = function() {
  alert('Your window has loaded');
};

実際には、オブジェクトのメソッドであると同時に、オブジェクトalertのメソッドでもあります。 では、なぜ違いがあるのでしょうか。W3Cのような正式な Web サイトでさえ、なぜこれを行うのでしょうか?windowonload

4

4 に答える 4

5

次の理由があります。

  1. スコープ チェーンの検索を減らすと、パフォーマンスがわずかに向上します。これは IIFE にも見られwindow、関数へのパラメーターとして送信され、その内部でウィンドウへのローカル参照が使用されます。
  2. グローバルに定義された関数/メンバーwindowがスコープ内でオーバーライドされると、期待どおりに機能しないため、明示的に参照すると正しい関数/メンバーが参照されます。これは、グローバル メンバーと同じ名前の関数/メンバーを作成し、シャドウ スコープからグローバル メンバーにアクセスできる場合に便利です。
于 2015-10-23T15:21:15.373 に答える
4

window.それについて明確にしたいときは書きます。基本的に、これを使用するのに適した 2 つのケースがあります。

  • windowオブジェクトのプロパティとメソッド-Windowインターフェイスの一部であるすべてのもの。.onloadあなたが言及しwindow.scrollYwindow.statusリスナーはwindow.parentこの例window.open()ですwindow.focus()window.removeEventListener()
  • グローバル プロパティの作成。任意のスコープからの割り当てwindow.myGlobalVarは、グローバルな「変数」を作成するための一般的な JS イディオムです。確かに、 で明示的に宣言することをお勧めしvarます。

ここで「オプションで」この部分を省略することもできwindow.ますが、それは一般的ではありません。特に、割り当てによる暗黙的なグローバル変数の作成は軽視され、通常は間違いと見なされます。したがって、意図的に行う場合は、 を使用して意図を宣言しますwindow.

ただし、最初のケースは常に明確に定義されているわけではありません。使用したいプロパティが本質的に静的なグローバル変数であり、正式に指定されている場合でもオブジェクトwindow.に必ずしも関連していない場合、この部分を省略することがよくあります。組み込みオブジェクトにorを使用しないのと同じように、接頭辞を付けて, , , orをwindow使用する人はめったに見ません(有効ですが)。documentatob()WorkersetTimeout()fetch()window.window.JSON.parsewindow.Array

navigatorlocationまたは常に明確であるとは限らないその他のプロパティについてalert()は、それらが使用されているかどうかに関係なく使用されます。

于 2015-10-24T10:16:31.433 に答える
1

.onload専用ではないのでwindow。としても使用できますdocument.onload。したがって、スクリプトを実行するタイミングに応じて定義します。

于 2015-10-23T15:25:13.307 に答える