42201


**両者の違いを知りたい**

* * *

**Q1.「location.href」よりも「window.location.href」と書いた方が良いケースはある？**  
・グローバルオブジェクトがwindowではない所からのリンクって例えばどんな時ですか？  
・スマホのブラウザからのアクセスも、グローバルオブジェクトはwindow？

* * *

**Q2.グローバルオブジェクト対象について**  
・例えば、「aサイトからbサイトへ遷移」した場合、「location.href」のグローバルオブジェクトは「aサイト」「bサイト」の何れが対象？  
・そもそも両者のグローバルオブジェクトが異なっていること自体が有り得ない？？

* * *

**Q3.window以外のグローバルオブジェクトについて**  
・例えば、Node.js経由で表示しているブラウザのグローバルオブジェクトはwindowですか？  
・Node.jsの中のグローバルオブジェクトだけがglobal？


CC BY-SA 3.0
2018-03-07T02:40:57.947
42181
2018-03-07T13:21:11.547
7886
question
javascript
「window.location.href」と「location.href」について


A1. あります。

スコープ上に `window.location` 以外の変数 `location` が存在する場合があります。

[code]

    function foo(...) {
      let location = 'Tokyo';
      // location と window.location は違う。
      ..
    }
    
[/code]

また、同名のローカル変数がない場合でも `window.location` と書いた場合と `location`
と書いた場合でパフォーマンスが違うという話も聞いたことがあります。

> グローバルオブジェクトがwindowではない所からのリンクって例えばどんな時ですか？

質問の意味わかりません。

> スマホのブラウザからのアクセスも、グローバルオブジェクトはwindow？

スマートフォンかどうかに関わらず、ウェブブラウザ環境でのメインスレッドのグローバルオブジェクトは `window` です。

ただし、ブラウザ環境でもワーカー内は `self` がグローバルオブジェクトになります。

A2. `window` グローバルオブジェクトは、ページ毎に異なるものが用意されます。ページA内のスクリプトから見える `window`
と、ページB内のスクリプトから見える `window` は、別のものです。

(厳密にはブラウジングコンテキスト毎で、IFRAMEを持っているドキュメントとそのIFRAME内のドキュメントは別の `window` を持ちます)

A3. Node.js の JavaScript 実行環境とブラウザの JavaScript 実行環境は何も関係がありません。Node.js ではいつでも
`global`、ブラウザ内ではいつでも `window` `self` などです。


CC BY-SA 3.0
2018-03-07T13:21:11.547
42201
2018-03-07T13:21:11.547
3475
42181
answer