아니요, 웹 브라우저의 JavaScript는 디자인 상 단일 스레드입니다. 즉, ajax 호출이 즉시 시작될 수 있지만 (브라우저의 다른 스레드에서 처리 될 수도 있음) JavaScript 인터프리터가 다음에 유휴 상태가 될 때까지 콜백이 수행되지 않습니다. 할 일은 통역사가 유휴 상태가되어 처리 할 때까지 기다리는 것입니다.
편집 응답 특정 질문 :
doSomethingElse에 병렬로 별도의 스레드에서 콜백 실행()를합니까?
아니요, 아니요, 콜백은 doSomethingElse
과 같은 논리 스레드에서 실행됩니다. (그것은 구현에 의존 그 같은 실제 기본 OS 스레드가 있는지 여부가 될 것입니다,하지만 당신은 알 방법이 없습니다 당신은 상관하지 않습니다 논리적으로을, 같은 스레드입니다.)
가의 실행을합니까 doSomethingElse()는 콜백이 실행될 때까지 일시 중지합니까?
기본적으로 get
은 비동기식입니다. doSomethingElse
은 요청을 시작하지만 계속됩니다. (동기화 기본 XmlHttpRequest 메커니즘을 통해 얻을 수 있지만 아주 나쁜 생각이야 - 요청이 실행되는 동안 브라우저의 UI를 완전히 잠그는 경향이 있습니다. 이것은 추한 것입니다. jQuery로 어떻게하는지 알 수 있습니다.)
doSomethingElse()가 반환 된 후에 만 콜백이 호출됩니까? 비동기 get
(보통의 종류)와
, 당신은 예, 콜백이 호출되기 전에
doSomethingElse
완료 것이라고 확신 할 수 있습니다. 이것은 JavaScript 인터프리터가 한 번에 한 가지만 수행하고 현재 작업이 완료 될 때까지 새로운 작업을 수행하지 않기 때문입니다. 따라서
doSomethingElse
이 get을 트리거하지만 (get은 자바 스크립트와 병행하여 다른 비 JavaScript 스레드에 의해 처리 될 수 있음) 인터프리터가
doSomethingElse
및 그 외의 호출로 완료 될 때까지 콜백이 발생하지 않습니다.
어떤 시점에서 브라우저 기반 JavaScript에서 여러 스레드가 시작되면 놀랄 일이 아니지만, 우리가 할 경우, 우리 모두가 그 순간에 행복하게 하나의 스레드를 가정하기 때문에 명시 적이어야합니다. .
olliej는하지만, "실행중인 다른 JS 코드가 없다"는 무엇을 의미 하는가? 다음 진술이 완료된 후에도 의미가 있습니까? .get() 함수를 실행 한 함수가 반환 한 후에? 또는 내 페이지의 모든 JS 코드가 실행될 때까지? – laramichaels
그가 의미하는 바는 JavaScript 코드가 실행 중이면 콜백에서 다른 JavaScript 코드에 의해 인터럽트되지 않는다는 것입니다. 예를 들어, 코드가 .ready() 이벤트를 실행하는 중간에 있다면 콜백이 실행되기 전에 ready 이벤트의 코드가 완료되어야합니다. –
명확히 해 주셔서 감사합니다! – laramichaels