JS 클로즈업이 간단합니다.
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에서 메모리 유출을 초래할 수 있다.해결 방법은 함수를 종료하기 전에 사용하지 않는 국부 변수를 모두 삭제하는 것이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.