9 마디 말 은 스 레 드 와 비동기 및 반전 함 수 를 쉽게 이해 합 니 다.

2241 단어
js 비동기
아홉 마디 말 은 스 레 드 와 비동기, 그리고 반전 함 수 를 쉽게 이해 할 수 있다.
  • js 에 다 중 스 레 드 가 없다. 즉, 같은 시간 에 하나의 임무 만 수행 한 다 는 것 이다
  • .
  • 그러나 만약 그렇다면 일부 이벤트 (예 를 들 어 사용자 가 클릭) 처럼 영원히 클릭 하지 않 으 면 뒤의 코드 는 영원히 기 다 려 야 합 니 다. 이 기다 림 은 무의미 하고 cpu 도 비어 있 습 니 다
  • 그래서 임 무 를 두 가지 로 나 누 었 다. 동기 화 임무 와 비동기 임무
  • 이른바 '동기 화 임무' 는 일반 임무 로 js 에서 하나씩 계속 수행
  • 모든 동기 화 작업 은 메 인 스 레 드 에서 실 행 됩 니 다. '실행 스 택'
  • 을 형성 합 니 다.
  • '비동기 임무' 는 (dom event, timer) 와 같 습 니 다. 그들 은 먼저 실행 하지 않 고 먼저 '임무 대기 열' 에 넣 고 (task quue) 먼저 실행 합 니 다.
  • '비동기 작업' 에서 '반전 함수' 를 지정 해 야 합 니 다. '반전 함수' 는 메 인 스 레 드 에 걸 린 코드 입 니 다. 메 인 스 레 드 가 '비동기 작업' 을 수행 하려 고 할 때 실제 적 으로 반전 함수
  • 를 실행 합 니 다.
  • 대기 열 임 무 는 항상 스 택 에서 동기 화 임 무 를 모두 완성 한 후에 야 수행 합 니 다
  • 스 택 의 작업 을 수행 한 후에 대기 열 작업 에서 수행 할 수 있 는 작업 (리 셋 함수) 을 읽 기 시 작 했 습 니 다. 이 때 리 셋 함 수 를 실행 스 택 에 넣 고 이렇게 순환 합 니 다
  • 분해 해서 말 하면
    문제.
    JavaScript 에서 대부분의 코드 는 하나의 실행 을 동기 화 합 니 다. 만약 에 이때 click 사건 을 썼 다 면 사용자 가 이 click 를 촉발 하지 않 았 습 니 다. 동기 화 된 사상 에 따라 click 사건 뒤의 코드 는 실행 되 지 않 았 습 니 다. 이 사건 을 촉발 할 때 까지 문 제 를 던 졌 습 니 다. 우 리 는 이 사건 들 을 어떻게 처리 합 니까?자바 스 크 립 트 는 다 중 스 레 드 가 없다 는 것 을 알 아야 한다.(다 중 스 레 드 에 대해 서 는 제 글 을 볼 수 있 습 니 다)
    방법.
    이때 가 바로 비동기 로 등장 할 때 이다.비동기 작업 에 대해 자바 스 크 립 트 는 직접 실행 하지 않 고 하나의 대기 열 로 밀어 넣 습 니 다. (대기 열 은 스 택 과 대기 열 을 볼 수 있 습 니 다) 대기 열 에 저 장 된 함 수 는 하나의 반전 함수 입 니 다.현재 실행 환경 이 실 행 된 후에 대기 열 에 있 는 리 셋 함 수 를 실행 합 니 다.
    예시
    예 를 들 어 setTimeout() 함수.
    function a(num) {
        for (var i = 0; i < num; i++) {
            (function(i) {
                setTimeout(function() {
                    console.log("b:" + i);
                }, 10);
            })(i);
            console.log("a:" + i);
        }
    }
    a(5);
    

    마지막 출력 은:
    eventUtil.js:42 a:0 eventUtil.js:42 a:1 eventUtil.js:42 a:2 eventUtil.js:42 a:3 eventUtil.js:42 a:4 eventUtil.js:38 b:0 eventUtil.js:38 b:1 eventUtil.js:38 b:2 eventUtil.js:38 b:3 eventUtil.js:38 b:4
    예 를 들 어 해석 하 다.
    이 를 통 해 알 수 있 듯 이 먼저 실 행 된 것 은 42 줄 의 코드 이 고 그 다음 에 실 행 된 것 은 38 줄 의 코드 가 비동기 코드 이기 때문이다.b 의 출력 은 0 - 4 에서 알 수 있 듯 이 이 비동기 코드 는 대기 열 에 저장 되 어 있 습 니 다. 이것 은 먼저 불 러 온 것 이기 때 문 입 니 다.

    좋은 웹페이지 즐겨찾기