자바스크립트가 정확히 무엇인가요?

정의

JavaScript는 초기에 클라이언트 측(웹 브라우저)에서 실행되도록 의도된 동기식 단일 스레드 스크립팅 언어입니다. 하지만 요즘에는 서버 측에서도 JavaScript를 실행할 수 있습니다.

하지만 잠깐, 동기식 및 단일 스레드가 무엇을 의미합니까?



깊이 파고들자



동기식

영어로는 단순히 어떤 일이 동시에 일어나고 있음을 의미합니다. 그리고 프로그래밍 언어의 관점에서 보면 코드가 한 줄씩 순서대로 실행된다는 의미입니다.

예:

console.log("one");
console.log("two");
console.log("three");

/*
The above code will execute in below order

one
two
three

*/


그러나 때로는 JavaScript에서 비동기적으로 실행되는 일부 코드를 만날 수 있습니다.

예:

console.log("one");

function magicFunction(){
  console.log("It's magic");
}

setTimeout(magicFunction,5000);

console.log("two");

/*
The above code will output the below result

one
two
undefined
It's magic --> will display this after 5000ms.

*/


이제 도대체 무슨 일이 일어나고 있는지 궁금할 것입니다. 방금 JavaScript가 동기식 언어라는 것을 읽었습니까??



왜 그리고 어떻게 이것을 더 깊이 이해합시다.

위의 예에서 setTimeout는 비동기적으로 실행됩니다.

하지만 setTimeout이 JavaScript 언어 자체의 일부가 아니라 브라우저의 웹 API의 일부라고 말하면 어떻게 될까요?

브라우저 API의 몇 가지 예는 fetch, setInterval, DOM 메서드 등입니다.

클라이언트 측에서 JavaScript를 더욱 강력하게 만들기 위해 브라우저 JS-Engine은 브라우저 API를 JavaScript와 연결하고 일반 JavaScript처럼 작동합니다.

따라서 JavaScript는 동기식 언어일 뿐입니다. JavaScript를 비동기식으로 실행하는 다른 래퍼가 있습니다.



알겠습니다. 하지만 단일 스레드가 무엇을 의미합니까?

단일 스레드

이는 단순히 JavaScript 코드를 실행하기 위한 단일 스레드 또는 호출 스택이 있음을 의미합니다. 그리고 우리는 이 스레드를 차단하지 않아야 합니다. 그렇지 않으면 앱이 충돌하고 하나의 작업이 실행되는 동안 다른 작업을 수행할 수 없습니다.

위의 예에서 setTimeout가 비동기적으로 실행되고 있음을 확인했습니다.

그러나 여기서는 메인 스레드를 차단하지 않습니다. 콜 스택 외부에서 실행됩니다.

시간 초과 후 seTimeout 내부의 콜백 함수는 콜 스택이 비워질 때까지 콜백 대기열에서 대기합니다.

이벤트 루프는 호출 스택이 비어 있는지 여부를 지속적으로 확인합니다. 빈 이벤트 루프를 얻 자마자 콜백 큐에서 콜백으로 콜백 함수를 넣으면 실행됩니다.



그리고 당신은 간다 ... 🤗🤗🤗



이제 JavaScript가 정확히 무엇인지 알았습니다.


더 많은 블로그 게시물을 보려면 나를 따르십시오.
이 블로그가 도움이 되었는지 알려주세요.

||

좋은 웹페이지 즐겨찾기