콜백을 사용할 때 Javascript 코드는 어떻게 비 동기화됩니까?


26

비동기 JavaScript 코드를 작성하는 방법을 알아 내려고 온라인에서 많은 것을 읽었습니다. 내 연구에서 많이 등장한 기술 중 하나는 콜백을 사용하는 것입니다. 콜백 함수를 작성하고 실행하는 프로세스를 이해하지만 콜백이 자동으로 JavaScript 실행을 비동기 적으로 만드는 것처럼 보이는 이유가 혼란 스럽습니다. 그래서 내 질문은 : JavaScript 코드에 콜백 함수를 추가하면 어떻게 코드가 자동으로 비 동기화됩니까?


2
John Resig가 작성한 단일 스레드 내에서 브라우저가이를 달성하는 방법을 읽는 데 관심이있을 수 있습니다. ejohn.org/blog/how-javascript-timers-work
Jalayn

@ 잘란. 감사. 귀하의 의견은 여러 답변을 읽은 후 모든 차이를 만들었습니다.
kushalvm

답변:


26

그렇지 않습니다. 콜백을 받거나 콜백을 전달한다고해서 비동기적인 것은 아닙니다.

예를 들어, .forEach함수는 콜백을 받지만 동기식입니다.

var available = false;
[1,2,3].forEach( function(){
    available = true;
});
//code here runs after the whole .forEach has run,
//so available === true here

setTimeout너무 콜백을 받아 비동기입니다.

function myFunction( fn ) {
    setTimeout( function() {
        fn(1,2,3);
    }, 0 );
}

var available = false;
myFunction( function() {
    available = true;
});
//available is never true here

Javascript에서 비동기 이벤트에 연결하려면 항상 콜백이 필요하지만 함수를 호출하거나 전달하는 것이 항상 비동기 적이라는 의미는 아닙니다.


2
@SteveEvers MDN 기사 를 편집 할 수있을 것 같습니다 . 콜백은 다른 함수에 전달 된 함수에 대해 자바 스크립트에서 매우 일반적으로 사용되는 용어입니다. 편집 : 콜백 또한 사양에
Esailija

3
@SteveEvers "콜백은 비동기를 암시합니다"는 C # / Microsoft 고유성입니다. en.wikipedia.org/wiki/Callback_(computer_programming)
Esailija

1
내 생각 @MikeBrown 나는 그의 프로필에 너무 많은 읽기 및 - 가장 upvoted 대답은 확실히 '콜백 비동기를 의미한다 "고 아이디어를 제공합니다.
Esailija

1
그러나 @SteveEvers라고 말하는 것은 잘못된 것입니다. 콜백은 비동기 성을 의미하지 않으며 다른 사람이 "콜백"을 담당합니다.
Michael Brown

1
Steve Evers가 틀
렸기

23

"마법"의 비밀은 콜백을 할당하는 이벤트 가 비동기 적이라는 것 입니다. JS 샌드 박스 외부의 백그라운드에서 수행중인 모든 작업 (예 : 원격 서버에서 무언가 검색)을 처리하기 위해 "후드"아래에서 구현됩니다. 그런 다음 작업을 마치면 JS 엔진에 이벤트를 호출하라는 메시지가 표시됩니다. JS 엔진이 현재 수행중인 작업으로 완료되면 대기중인 모든 이벤트를 호출하거나 새 메시지를 기다립니다. 그러면 콜백이 "마 법적으로"비동기 적으로 호출됩니다!

( 참고 : 이것은 JS 엔진이 다른 방식으로 구현할 것이기 때문에 세부 사항으로 다루지 않는 주제에 대한 매우 높은 수준의 개념적 개요입니다. 그러나 이것이 작동하는 일반적인 아이디어입니다.)


어떤 이벤트입니까? 하나 또는 두 개의 이러한 이벤트의 예는 귀하의 답변을 더욱 향상시킬 것입니다.
Jo Smo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.