[관문 통과 모드] 역할 영역, 체인 과 폐쇄 하

3350 단어 자바 script
머리말
전편 [관문 돌파 모드] 역할 영역, 체인 과 폐쇄 중
퀘 스 트 4 종 단 (Closures)
폐쇄 는 JS 에서 매우 중요 한 개념 으로 JS 가 비동기 임 무 를 훌륭하게 완성 하도록 한다.
폐쇄 를 잘 이해 하기 위해 서 우 리 는 먼저 역할 도 메 인 체인 의 예 를 살 펴 보 자.
someFunc()
    ↑
    |
 inner()
    ↑
    |
  foo()

우 리 는 someFunc() 변수 bar 를 성명 했다 고 말 했다.
someFunc()
 var bar
    ↑
    ⋮

포 함 된 역할 영역 에 대한 지식 이 있 습 니 다. 우 리 는 inner() 방문 할 권리 가 있다 고 말 할 수 있 습 니 다 bar.
someFunc()
 var bar
    ↑
    |
 inner()
alert(bar)
    ↑
    ⋮
inner() 싸 졌 다 고 할 수 있 습 니 다 bar. 그래서 inner() 는 폐쇄 적 입 니 다.
리 셋 식 프로 그래 밍 을 위해 서 는 inner() 즉시 실행 되 지 않 아 도 패 킷 이 유 지 됩 니 다.JS 에서 inner 를 보 내 거나 잠시 후 someFunc() 에서 되 돌아 오 는 것 도 가능 하 며, 이 과정 에서 bar 는 계속 사용 할 수 있 을 것 이다.
너의 임무
이전 코드 를 수정 하고 설정 zip() 중의 bar = true 을 설정 한 다음 foo() 에서 zip return 나 옵 니 다.
완성 후 실행 scope-chains-closures verify 으로 당신 의 답 을 검증 합 니 다.
미 션 5 쓰레기 수 거 메커니즘 (Garbage Collection)
JS 에 서 는 메모리 가 실 행 될 때 환경 (runtime) 이 자동 으로 관 리 됩 니 다.실행 할 때 환경 이 메모리 의 방출 을 결정 합 니 다.이 결정 과정 을 쓰레기 회수 체제 라 고 한다.
모든 JS 운영 환경 에는 자신의 쓰레기 회수 메커니즘 의 알고리즘 이 있 지만 대부분 사용 하 는 것 은 유사 합 니 다. & 알고리즘 은 이 알고리즘 의 원 리 는 활동 코드 에 도달 할 수 있 는 메모리 의 인용 (변수, 함수 등) 만 표시 하고 그 어떠한 인용 도 표시 되 지 않 으 면 쓰레기 로 회수 되 는 것 입 니 다. (즉, 이 메모리 가 방출 되 는 것 입 니 다)
이 표 시 는 메모리 에 도달 할 수 있다 는 개념 도 어느 정도 폐쇄 와 관련 이 있다.
 someFunc()
  var bar
return inner
     ↑
     |
  inner()
 alert(bar)
     ↑
     ⋮

폐쇄 inner()someFunc() return 에 의 해 떨 어 졌 을 때 bar 에 대한 인용 을 유지 했다. 이때 & 알고리즘 은 bar 에 도달 할 수 있 기 때문에 bar 쓰레기 에 의 해 회수 되 지 않 았 다.inner() 에 대해 말하자면 bar 에 대한 인용 을 정확하게 해석 하기 위해 서 는 bar 저 장 된 이 메모 리 를 유지 해 야 할 뿐만 아니 라 bar 에 접근 할 수 있 는 이 역할 체인 을 유지 해 야 한다.inner() 에 대한 인용 이 더 이상 필요 하지 않 으 면 쓰레기 를 회수 할 수 있다. 이것 은 bar 도 쓰레기 에 의 해 회수 되 고 최종 적 으로 모든 역할 도 메 인 체인 이 회수 되 며 메모리 가 방출 된다 는 것 을 의미한다.
그 러 니까 역할 영역, 역할 영역 체인, 폐쇄, 쓰레기 회수 체제, 그들 은 모두 밀접 한 관 계 를 가진다!
너의 임무
쓰레기 수 거 메커니즘 의 운행 을 크롬의 개발 자 도구 로 검사 해 야 합 니 다.다음 절차 에 따라 쓰레기 수 거 를 느껴 보 세 요.
1) Chrome 에서 tab 2 를 열 고 개발 자 도구 > Timeline tab 3 를 엽 니 다) 설정 과 아래 그림 이 일치 하 는 지 확인 합 니 다. a) 선택 취소 Frames View (allows seeing memory graphs) b) 선택 한 Flame Chart View (allows seeing where execution time is spent) c) 옵션 에서 "Memory" 4 만 선택 하고 회색 원형 단 추 를 누 르 면 데이터 수집 을 시작 합 니 다 5) 한 사 이 트 를 마음대로 방문 합 니 다 http://www.baidu.com6) 빨간색 녹화 버튼 을 누 르 면 데이터 수집 을 중단 합 니 다. 7) 다음 그림 을 볼 수 있 습 니 다. 8) 우리 가 주목 해 야 할 것 은 메모리 가 갑자기 줄 어 든 곳 입 니 다. 9) 이 부분 에서 갑자기 줄 어 든 메모리 10) 'GC Event' 라 는 노란색 부분 을 보 세 요. 11) 그리고 회수 한 총 내 저장량 과 시간 소 모 를 볼 수 있 습 니 다.
재 미 있 는 것 은 GC 의 시간 소모: 보통 16ms (이것 은 60fps 의 최대 치 를 유지 할 수 있다) 를 훨씬 초과 한 다 는 것 이다.동시에 GC 가 발생 할 때 메 인 스 레 드 를 막 기 때문에 프로그램 이 끊 기 면 대량의 GC 가 일 으 킬 수 있 습 니 다.
참고: 강박 증 이 있 으 면 계속 운행 할 수 있 습 니 다 scope-chain-closures verify완전무결 하 다
번역 이 급 합 니 다. 잘못 이 있 으 면 지적 을 환영 합 니 다!좋아요 누 르 는 게 나 아 요.
부록
관문 통과 프로젝트 주소

좋은 웹페이지 즐겨찾기