この行を入力したとき、Chrome 13 で開発者ツールを使用していました。
var location = "Hello";
Enter キーを押すと、ページが変わり、404 エラーが発生しました。アドレスバーHello
が最後のアドレスに追加されました。
過去にまったく同じ行を Chrome に入力したことがありますが、同じ問題は発生していません。場所は だと思いましたwindow.location
。
何かが変わったのですか、それともこれまで気づかなかったのですか?
この行を入力したとき、Chrome 13 で開発者ツールを使用していました。
var location = "Hello";
Enter キーを押すと、ページが変わり、404 エラーが発生しました。アドレスバーHello
が最後のアドレスに追加されました。
過去にまったく同じ行を Chrome に入力したことがありますが、同じ問題は発生していません。場所は だと思いましたwindow.location
。
何かが変わったのですか、それともこれまで気づかなかったのですか?
Chrome のスコープ ルールが変更された可能性があります。var
コンソールをウィンドウ スコープとして扱うべきか、謎のコンソール スコープとして扱うべきかは、私にはわかりません。
location という名前の変数を作成する場合は、即時関数を使用するなどして、安全なスコープを作成する必要があります。例えば
(function(){
var location = "hello"; // safe
})();
開発者ツールのコンテキストがwindow
. 入力this
して内容を確認します。おそらくwindow
です。
したがって、次のように入力すると:
var location = "Hello";
既に存在するグローバル スコープ内の変数を再定義しようとしています。ブラウザのグローバル スコープはwindow
オブジェクトです。したがって、location
グローバル スコープでは と同じwindow.location
です。
すでに存在するオブジェクトを ( を使用して) 再定義しようとしてvar
も、javascript ではエラーになりません。var
宣言を無視して代入を行うだけです。そして、ロケーション オブジェクトに文字列を割り当てると、新しい Web ページに移動します。