2016-10-07 9 views
0

誰かがここで説明することができます。なぜリダイレクトの前にアラートが表示されるのですか? これを切り替える方法はありますか?ここリダイレクトの前にアラートが表示されるのはなぜですか?

function test() { 
    window.location.href="https://www.google.com"; 
    window.onload = alert("It's loaded!") 
} 

例です。

jsbin:あなたの現在のJavascriptのスレッドが実行を完了するまでhttps://jsbin.com/zenidafihu/3

答えて

1

三つの異なるここに問題があります:

新しいページがロードされるまで、すべてを停止しませんlocationに新しい値を割り当てると非同期(async)新しい場所をロード

です。それは値を割り当て、その後、ある時点でブラウザは新しいページをロードします。それまでの間は、すべてが正常に進行します。

onload

を期待

alert("It's loaded!")アラート機能(即時)を呼び出し(関数ではない)そのコールの戻り値として評価されている機能を渡されます。その戻り値はonloadに割り当てられます。あなたが離れるとき

onload = alert.bind(window, "It's loaded!"); 

または

onload = function() { alert("It's loaded!"); }; 

各ページには、別のJS環境

です:

機能を割り当てるには、次のような、実際の機能を持っている必要があります新しい実行環境を作成します。すべての変数とデータが失われます。 (あなたはローカルストレージとクッキーを介して物を保存し、URLを通して他の起源に物を渡すことができますが)。

あなたが行っているページには何もしないことはできません。 次のページのonloadハンドラを設定することはできません。

0

リダイレクトが開始されません。したがって、機能が終了するまで、すなわちアラートが解消されるまで、位置は何も起こらない。

0

JavaScriptは非同期言語です。したがって、アラートのコードは、最初のステートメント、つまりリダイレクトの完全な実行を待つことはありません。

関連する問題