[JQUERY] 때 자바 스크립트 동기는 무엇입니까?
JQUERY때 자바 스크립트 동기는 무엇입니까?
해결법
-
1.자바 스크립트는 항상 동기 및 단일 스레드입니다. 한 페이지에 코드의 자바 스크립트 블록을 실행하는 경우 다음 해당 페이지에 다른 자바 스크립트는 현재 실행되지 않습니다.
자바 스크립트는 항상 동기 및 단일 스레드입니다. 한 페이지에 코드의 자바 스크립트 블록을 실행하는 경우 다음 해당 페이지에 다른 자바 스크립트는 현재 실행되지 않습니다.
자바 스크립트를 만들 수 있다는 점에서 비동기, 예를 들어, 아약스 호출합니다. Ajax 호출이 실행 중지 및 기타 코드는 콜백 동 기적으로 실행됩니다 지적하는 호출이 반환 (성공적 또는 기타), 때까지 실행할 수 있습니다. 다른 코드는이 시점에서 실행되지 않습니다. 그것은 현재 실행중인 다른 코드를 방해하지 않습니다.
자바 스크립트 타이머 콜백의이 같은 종류로 작동합니다.
비동기로 자바 스크립트를 설명하는 것은 아마도 오해의 소지가있다. 그것은 자바 스크립트는 다양한 콜백 메커니즘을 스레드 단일 동기 및 것이라고하는 것이 더 정확하다.
jQuery를은 (: 잘못된 옵션을 비동기로) 기적을 만드는 아약스 호출에 대한 옵션이 있습니다. 초보자는 하나의 이상으로 사용될 수있는 전통적인 프로그래밍 모델 수 있기 때문에 잘못이를 사용하는 유혹 될 수 있습니다. 이 문제의 이유는 완료 될 때까지이 옵션은 모든 이벤트 핸들러 및 타이머를 포함하여, 페이지의 모든 스크립트를 차단하는 것입니다.
-
2.자바 스크립트는 단일 스레드이며, 동기 실행 모델을 가지고있다. 단일 한 명령이 한 번에 실행되는 방법을 스레드. 동기 수단에 한 줄의 코드는 코드가 나타날 순서시에 실행되고, 즉 한번에 하나. 그래서 자바 스크립트에서 한 가지 한 번에 일어나고있다.
자바 스크립트는 단일 스레드이며, 동기 실행 모델을 가지고있다. 단일 한 명령이 한 번에 실행되는 방법을 스레드. 동기 수단에 한 줄의 코드는 코드가 나타날 순서시에 실행되고, 즉 한번에 하나. 그래서 자바 스크립트에서 한 가지 한 번에 일어나고있다.
실행 컨텍스트
자바 스크립트 엔진은 브라우저에서 다른 엔진과 상호 작용한다. 자바 스크립트 실행 스택에서 맨 아래에있는 글로벌 컨텍스트가 다음 우리는 함수를 호출하는 자바 스크립트 엔진은 각각의 기능에 대한 새로운 실행 컨텍스트를 생성 할 때. 호출 된 함수가 종료 할 때 등등의 실행 컨텍스트 스택에서 팝되며, 다음 실행 컨텍스트가 튀어되고 ...
예를 들면
function abc() { console.log('abc'); } function xyz() { abc() console.log('xyz'); } var one = 1; xyz();
위의 코드에서 글로벌 실행 컨텍스트가 생성되고 이러한 맥락 var에 하나가 저장되며 그 값은 XYZ () 호출 후 호출되는 새로운 실행 컨텍스트가 생성됩니다 한 것입니다 ... 우리는 정의했다면 XYZ 함수의 모든 변수는 그 변수의 XYZ 실행 컨텍스트에 저장 될 것이다 (). XYZ 기능에서 우리는 ABC () 후 ABC () 실행 컨텍스트가 생성되고 실행 스택에 넣고는 ... 지금 ABC ()는 문맥이 다음 XYZ () 컨텍스트에서 튀어되고, 스택에서 팝되고 완료되면 호출 스택 다음 글로벌 컨텍스트가 튀어됩니다 ...
이제 비동기 콜백에 대한; 더 한 번에 하나 이상의 비동기 의미합니다.
그냥 실행 스택과 같은 이벤트 대기열이 있습니다. 우리는 자바 스크립트 엔진에서 어떤 이벤트에 대한 통지를 할 때 우리는 그 이벤트를 수신 할 수 있으며, 해당 이벤트는 큐에 배치됩니다. 예를 Ajax 요청 이벤트, 또는 HTTP 요청 이벤트.
위의 코드 예제에 표시된 것처럼 실행 스택이 비어있을 때마다, 자바 스크립트 엔진은 주기적으로 이벤트 큐를 살펴보고에 대한 알림 어떤 이벤트가 있는지 본다. 예를 들어 큐에 두 개의 이벤트, Ajax 요청과 HTTP 요청이 있었다. 자바 스크립트 엔진이 이벤트에 대한 알림 및 해당 이벤트에서 실행하는 각각의 기능을 알고있다 그래서 자바 스크립트 엔진이를 호출 그래서 그것은 또한 ... 그 이벤트 트리거에서 실행해야하는 기능이 있는지 본다 핸들러 함수는 예시적인 경우에, 예를 들어 AjaxHandler는 ()를 호출 할 것이며, 함수가 호출 될 때 언제나처럼 그 실행 컨텍스트가 실행 컨텍스트에 배치되고 AjaxHandler ()을 완료 할 때 현재 함수의 실행이 완료되고 이벤트 Ajax 요청은 또한 이벤트 큐 ...로부터 제거 엔진이 다시 이벤트 큐에 보이는 큐에서 다음이었다 요청 HTTP의 이벤트 핸들러 함수를 실행되도록 실행 스택이 비어 있습니다. 실행 스택이 비어있는 경우에만 이벤트 큐가 처리되는 것을 기억하는 것이 중요하다.
예를 들어, 자바 스크립트 엔진에 의해 실행 스택 및 이벤트 큐 처리를 설명하는 아래의 코드를 참조.
function waitfunction() { var a = 5000 + new Date().getTime(); while (new Date() < a){} console.log('waitfunction() context will be popped after this line'); } function clickHandler() { console.log('click event handler...'); } document.addEventListener('click', clickHandler); waitfunction(); //a new context for this function is created and placed on the execution stack console.log('global context will be popped after this line');
과
<html> <head> </head> <body> <script src="program.js"></script> </body> </html>
이제 웹 페이지를 실행하고 페이지를 클릭하고 콘솔에 출력을 참조하십시오. 출력 될 것입니다
waitfunction() context will be popped after this line global context will be emptied after this line click event handler...
자바 스크립트 엔진은 기적이 같은 실행 컨텍스트 부분에 설명 된 코드를 실행하는 브라우저는 비동기 이벤트 큐에 물건을두고있다. 완료 인터럽트 이벤트 처리에 시간이 오래 걸릴 기능 그래서. 이벤트와 같은 브라우저에서 일어나고있는 상황이 실행되어 청취자가있는 경우 실행 스택이 비어있을 때, 엔진은 그것을 실행, 자바 스크립트에 의해 이런 식으로 처리됩니다. 그리고 이벤트는 비동기 부분은 엔진 외부에서 무슨 일이 일어나고 있는지에 관한 것입니다, 그래서 그들이 일어나는 순서대로 처리 즉, 어떤 사람들 외부 이벤트가 발생하면 엔진이 수행해야합니다.있다
그래서 자바 스크립트는 항상 동기입니다.
-
3.자바 스크립트는 단일 스레드이며, 모든 시간을 당신은 정상 동기 코드 흐름 실행에서 작동합니다.
자바 스크립트는 단일 스레드이며, 모든 시간을 당신은 정상 동기 코드 흐름 실행에서 작동합니다.
자바 스크립트를 가질 수있는 비동기 행동의 좋은 예는 기본적으로 언제든지 발생할 수있는 행동 이벤트 (사용자 상호 작용, Ajax 요청의 결과 등) 및 타이머입니다.
나는 다음과 같은 기사에 대한 느낌을주기를 추천 할 것입니다 :
그 문서는 자바 스크립트를 어떻게 타이머가 내부적으로 작동하는 방법과 비동기 자바 스크립트 실행 작업의 단일 스레드 본질을 이해하는 데 도움이 될 것입니다.
-
4.정말 JS이 질문이 떨어져 보일 수 있습니다 어떻게 작동하는지 이해하는 사람에게, 그러나 JS를 사용하는 대부분의 사람들은 통찰력의 그런 깊은 수준이없는 (반드시 필요하지 않은) 그들에게이 상당히 혼란 포인트, 난 것이다 그 관점에서 답변을 시도합니다.
정말 JS이 질문이 떨어져 보일 수 있습니다 어떻게 작동하는지 이해하는 사람에게, 그러나 JS를 사용하는 대부분의 사람들은 통찰력의 그런 깊은 수준이없는 (반드시 필요하지 않은) 그들에게이 상당히 혼란 포인트, 난 것이다 그 관점에서 답변을 시도합니다.
JS는 코드가 실행되는 방식으로 동기화된다. 가 완료되기 전에 각 라인은 라인 후에 실행하고 그 선이 함수를 호출하는 경우 그 요법 완료된 후 ...
혼란의 주요 포인트는 (콘솔에서 페이지에 대한 자세한 JS 코드를 excute에 할 수있는 방법에 simmlar) 브라우저가 언제든지 더 많은 코드를 excute에하는 JS을 말할 수 있다는 사실에서 발생한다. 예를 들어 JS 목적의 콜백 기능 JS는 비동기 적 행동 (IE에게 GET 호출) 실행 된 JS 기능에 대한 대답을 다시 반환을 기다리는 동안 너무 JS의 추가 부품, JS는 계속 실행됩니다 실행할 수 있도록하는 것입니다있다 브라우저 이때 이벤트 루프 (브라우저)에 대답 할 때까지 콜백 함수를 호출하는 JS 코드를 실행한다.
이벤트 루프 (브라우저) CAN 입력이 더 JS 그런 의미에서 어느 시점에서 실행될 수 있기 때문에 JS가 비동기 (입력 JS 코드 브라우저를 야기하는 기본 것들이 제한 시간, 콜백 및 이벤트 임)
나는이 누군가에게 도움이 될 수있는 명확한 충분 바랍니다.
-
5.실제로하지 않은 상태 "비동기"라는 용어는, 여기에 보이는 충돌 답변의 결과로, 약간 다른 의미로 사용할 수 있습니다. 비동기에 위키 백과는이 정의를 가지고 :
실제로하지 않은 상태 "비동기"라는 용어는, 여기에 보이는 충돌 답변의 결과로, 약간 다른 의미로 사용할 수 있습니다. 비동기에 위키 백과는이 정의를 가지고 :
비 자바 스크립트 코드는 자바 스크립트의 이벤트 큐의 일부와 같은 "외부"이벤트를 대기 할 수 있습니다. 그러나 그것은 지금까지 잘 지내입니다.
스크립트에서 다른 자바 스크립트 코드를 실행하기 위해 자바 스크립트 코드를 실행 외부 중단은 없다. 자바 스크립트의 조각을 하나씩 실행하며, 순서는 각 이벤트 큐의 이벤트 순서, 그 큐의 우선 순위에 의해 결정된다.
예를 들어, 다음 코드 조각이 실행되는 동안 (동일한 스크립트에서) 다른 자바 스크립트가 지금까지 실행되지 것을 절대적으로 확신 할 수 있습니다 :
let a = [1, 4, 15, 7, 2]; let sum = 0; for (let i = 0; i < a.length; i++) { sum += a[i]; }
즉, 자바 스크립트에는 선점이 없습니다. 이벤트 큐에있을 수 있습니다 무엇이든간에, 그 사건의 처리는 코드와 같은 조각이 완료 달아 가질 때까지 기다려야 할 것이다. ECMA 스크립트 사양은 8.4 절 채용 정보 및 채용 대기열에서 말한다 :
이미 다른 사람이 쓴 것처럼,이 비동기 자바 스크립트에서 활동하기 시작하는 여러 가지 상황이 있고, 항상 실행 다른 자바 스크립트 코드가없는 경우에만 자바 스크립트가 실행될 수있는 이벤트 큐를 포함한다 :
이 더 많은 사례가 있지만 이러한 모든 기능은 없습니다 핵심 ECMA 스크립트에 의해, 호스트 환경에 의해 제공됩니다. 핵심 ECMAScript를 사용하면 동기 Promise.resolve와 약속 작업 큐에 이벤트를 배치 할 수 있습니다 ().
ECMA 스크립트는 await를 수율, 비동기, 같은 비동기 패턴을 지원하기 위해 여러 언어 구조를 제공합니다. 그러나 실수도 할 수 없습니다 : 없음 자바 스크립트 코드가 외부 이벤트에 의해 중단되지 않습니다. AWAIT 제공하는 것처럼 보이는 "중단"그 수율은 (수율의 경우) JS 코드가 어느 함수 호출로부터 리턴 나중에 그것의 실행 컨텍스트를 복원하는 제어, 미리 정의 된 방법 또는 이벤트 큐 (입니다 AWAIT의 경우).
자바 스크립트 코드는 DOM API를 액세스 할 때, 어떤 경우에는이 5 월은 DOM의 API 트리거 하나 이상의 동기 통지를합니다. 코드가에 이벤트 핸들러 청취를 가지고 있다면, 그것은 호출됩니다.
이 선제 동시성으로 건너 수 있지만되지 않습니다 : 이벤트 핸들러 (들) 반환 (들)는 DOM API는 결국도 반환되면, 원래의 자바 스크립트 코드가 계속됩니다.
다른 경우에는 DOM의 API는 해당 이벤트 큐에 이벤트를 전달하며, 호출 스택이 비워되고 나면 자바 스크립트가 그것을 선택할 것입니다.
동기 및 비동기 이벤트를 참조하십시오
-
6.모든 경우에 동기입니다.
모든 경우에 동기입니다.
약속과 스레드를 차단의 예 :
const test = () => new Promise((result, reject) => { const time = new Date().getTime() + (3 * 1000); console.info('Test start...'); while (new Date().getTime() < time) { // Waiting... } console.info('Test finish...'); }); test() .then(() => console.info('Then')) .finally(() => console.info('Finally')); console.info('Finish!');
출력은 다음과 같습니다
Test start... Test finish... Finish!
-
7.당신은 동기 방식 또는 비동기 방식으로 자바 스크립트를 사용할 수 있습니다. 사실 자바 스크립트는 정말 좋은 비동기 지원합니다. 예를 들어 나는 데이터베이스 요청을 필요로 코드가있을 수 있습니다. 나는 전체에 해당 요청 기다리는 동안 나는 그 때, 그 요청에 의존하지 않는 다른 코드를 실행할 수 있습니다. 이 비동기 코딩은 약속 지원, 비동기 / await를, 등등하지만 긴 대기를 처리 할 수있는 좋은 방법이 필요하지 않은 경우 다음 단 기적으로 JS를 사용한다.
당신은 동기 방식 또는 비동기 방식으로 자바 스크립트를 사용할 수 있습니다. 사실 자바 스크립트는 정말 좋은 비동기 지원합니다. 예를 들어 나는 데이터베이스 요청을 필요로 코드가있을 수 있습니다. 나는 전체에 해당 요청 기다리는 동안 나는 그 때, 그 요청에 의존하지 않는 다른 코드를 실행할 수 있습니다. 이 비동기 코딩은 약속 지원, 비동기 / await를, 등등하지만 긴 대기를 처리 할 수있는 좋은 방법이 필요하지 않은 경우 다음 단 기적으로 JS를 사용한다.
우리는 '비동기'무엇을 의미합니까. 그럼 그렇지 평균 멀티 스레드 않지만, 오히려 비 의존적 관계를 설명합니다. 이 인기 대답에서이 이미지를 체크 아웃 :
A-Start ------------------------------------------ A-End | B-Start -----------------------------------------|--- B-End | | C-Start ------------------- C-End | | | | | | | | V V V V V V 1 thread->|<-A-|<--B---|<-C-|-A-|-C-|--A--|-B-|--C-->|---A---->|--B-->|
우리는 단일 스레드 응용 프로그램이 비동기 동작을 가질 수 있음을 참조하십시오. 함수 A의 작업은 완료 함수 B에 의존하지 않고, 함수 A가 함수 B 전에 시작하면서 그래서, 함수 A는 나중에 동일한 스레드에서 완료 할 수 있습니다.
그래서, 자바 스크립트가 단일 스레드에서, 한 번에 하나 개의 명령을 실행해서, 그 다음 자바 스크립트는 동기 언어로 사용될 수 있음을 따르지 않습니다.
이 질문의 핵심 있는지 궁금 하군요. 난 당신이 전화하는 몇 가지 코드가 비동기 또는 동기 인 경우 당신은 당신이 알고 어떻게 의미하는 것으로 받아. 즉, 당신이 어떤 결과를 기다리는 동안 코드의 나머지 부분은 뭔가를 실행 할 것인가? 첫 번째 검사는 사용하는 중 라이브러리의 문서해야한다. 노드 방법은, 예를 들어, readFileSync 같은 명확한 이름이 있습니다. 문서가 좋은이없는 경우 여기에 SO에 많은 도움이있다. EG :
함수가 비동기 경우 어떻게 알고?
from https://stackoverflow.com/questions/2035645/when-is-javascript-synchronous by cc-by-sa and MIT license
'JQUERY' 카테고리의 다른 글
[JQUERY] JQuery와 UI 날짜 선택기가 비활성화 토요일과 일요일 (공휴일)로 만들 수 있습니다? (0) | 2020.09.28 |
---|---|
[JQUERY] 아약스 요청은 200 OK를 반환하지만 오류 이벤트가 대신 성공 해고 (0) | 2020.09.27 |
[JQUERY] 사용자가 종료 키까지 대신 입력 할 때 자바 스크립트 함수를 실행? (0) | 2020.09.27 |
[JQUERY] 변수는 AJAX 함수에서 반환되지 않습니다 (0) | 2020.09.27 |
[JQUERY] jQuery를이 : 텍스트에 의한 요소를 찾을 수 (0) | 2020.09.27 |