JS 클로즈업이 간단합니다.

1789 단어
1. 먼저 패킷을 닫는 코드의 작은 예를 살펴보자.
var scope = "  scope"; 
function checkScope() {
var scope = "  scope";
function f() {
    return scope;
}
return f();
}
checkScope();   //=> "  scope"

패키지를 닫으면 국부 변수와 매개 변수의 외부 함수 연결을 포착할 수 있습니다. 외부 함수의 호출이 끝났음에도 불구하고.어법 작용역의 규칙, 즉 함수가 실행될 때(executed)에서 사용하는 작용역 체인(scope chain)은 정의될 때의 scope chain이지 실행될 때의 scope chain이 아니다. 클로즈업 행위를 쉽게 이해할 수 있다.
2. 자바스크립트 언어에서 클립은 함수와 이 함수 작용역의 조합이다.이 개념에서 볼 때 js에서 모든 함수는 클립(함수는 대상이고 함수는 그들과 관련된 작용역 체인 scope chain)이 있다.간단하게 말하자면, 패킷을 닫는 것은 다른 함수 작용역의 변수에 접근할 수 있는 함수이다.
3. ES6 이전에 함수는 전역 및 함수 역할 도메인에서만 선언할 수 있고 블록 레벨 역할 도메인에서는 선언할 수 없습니다.블록급 작용역이 없어서 많은 장면이 불합리하다. 폐쇄는 일부 지역에서 이 불합리함을 잘 해결했다.
4. 클로즈업 장면
장면 설명: 만약에 페이지에 5개의 button이 있다면 button에 onclick 이벤트를 연결하고 클릭할 때 button에 대응하는 색인 번호를 팝업합니다.
#html



 









#js
...
var btns = document.getElementsByTagName('button');
for(var i = 0, len = btns.length; i < len; i++) {
btns[i].onclick = function() {
    console.log(i);
}
}
...

이 단락의 코드를 실행하여 어느 button을 클릭하든지 4를 입력하는 것을 발견한다.이것은 분명히 우리의 요구에 부합되지 않는다. 우리는 코드를 수정해야 한다.️⃣ for 순환 중인 var을let 2로 변경️⃣Tip: ES6 이전에는 블록 역할 영역이 없고 함수 역할 영역만 있었습니다(즉, var을 통해 선언된 변수에는 블록 역할 영역이 없습니다)."즉시 실행 함수"의 방식으로 작용역을 만들 수 있습니다.
for(var i = 0, len = btns.length; i < len; i++) {
(function(i) {
    btns[i].onclick = function() {
       console.log(i);
    }
}(i))
}

5、가방 닫기 주의
클로즈업은 함수 중의 변수를 메모리에 저장하여 메모리 소모가 매우 크기 때문에 클로즈업을 남용해서는 안 된다. 그렇지 않으면 웹 페이지의 성능 문제를 초래하고 IE에서 메모리 유출을 초래할 수 있다.해결 방법은 함수를 종료하기 전에 사용하지 않는 국부 변수를 모두 삭제하는 것이다.

좋은 웹페이지 즐겨찾기