2016-10-07 3 views
0

누군가 여기서 설명 할 수 있습니까? 리디렉션 전에 경고를받는 이유는 무엇입니까? 그리고 전환 할 수있는 방법이 있습니까? 여기 리디렉션 전에 경고가 실행되는 이유는 무엇입니까?

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

은 예입니다

jsbin : 현재 자바 스크립트 스레드 실행이 완료 될 때까지 https://jsbin.com/zenidafihu/3

답변

1

세 가지 다른 여기에 문제가 있습니다

새 페이지가로드 될 때까지 모든 것을 멈추지 않을 것입니다 location에 새 값을 할당 비동기 새 위치를로드

이다. 그러면 값을 할당 한 다음 나중에 어느 시점에서 브라우저가 새 페이지를로드합니다. 그동안 모든 것이 정상적으로 계속 될 것입니다.

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는 비동기 언어입니다. 따라서 귀하의 경고에 대한 코드는 첫 번째 명세서의 완전한 실행, 즉 리디렉션을 기다리지 않습니다.

관련 문제