자 바스 크 립 트 폐쇄 (3)
1. 실행 환경 과 역할 영역 체인
2. 함수 즉시 실행
3. 폐쇄 지식 포인트
3.1 폐쇄 란 무엇 인가
3.2 폐쇄 적 인 의미 와 주의 점 사용
3.3 패키지 의 구체 적 인 응용
4. 소결
이것 은 자 바스 크 립 트 기본 문법의 함수 부분의 두 번 째 문장 으로 자 바스 크 립 트 에서 비교적 중요 한 지식 점 폐쇄 를 다 루 었 다.패 킷 을 닫 기 전에 지난 편 인 을 바탕 으로 실행 환경 과 역할 도 메 인 체인 의 지식 점 을 심화 시 키 고 즉시 실행 함수 에 대한 지식 을 보충 합 니 다.마지막 으로 폐쇄 와 관련 된 부분 을 중점적으로 연구 했다.
1. 실행 환경 과 역할 영역 체인
패 킷 을 닫 기 전에 먼저 함수 의 집행 환경 과 역할 도 메 인 체인 의 원 리 를 뚜렷하게 이해 해 야 한다.1.1 실행 환경 은 변수 가 실행 단계 에 있 는 역할 영역 을 말 합 니 다. 실행 환경 은 변수 나 함수 가 접근 할 수 있 는 다른 데 이 터 를 정의 합 니 다. 모든 실행 환경 은 이와 관련 된 변수 대상 이 있 고 환경 에서 모든 변 수 는 이 대상 에 저 장 됩 니 다.
var a = 1;
function fn (args){
console.log(a+args)
}
fn(1)//2
상기 코드 는 두 개의 실행 환경 이 존재 합 니 다. 모든 실행 환경 은 이와 관련 된 변수 대상 이 있 습 니 다. 변수 a 와 함수 fn 은 전체 변수 대상 window 에 저장 되 고 함수 의 매개 변 수 를 저장 하 는 agruments 대상 은 부분 변수 대상 fn 에 저 장 됩 니 다.주의해 야 할 것 은 이 실행 환경 이 함수 라면 활동 대상 을 변수 대상, 즉 함수 호출 시 생 성 된 대상 으로 합 니 다. 함수 가 호출 되 지 않 아 정 의 된 변 수 는 존재 하지 않 기 때 문 입 니 다.1.2 역할 도 메 인 체인 은 코드 가 한 환경 에서 실 행 될 때 변수 대상 의 역할 도 메 인 체인 을 만 듭 니 다. 역할 도 메 인의 용 도 는 실행 환경 이 현재 역할 도 메 인 과 그 외부 변 수 를 질서 있 게 방문 할 수 있 도록 하 는 것 입 니 다.
var a =1;
function fn(b,c){
var d = 4;
console.log(a+b+c+d)
}
fn(2,3)//10
상기 코드 를 예 로 들 어 집행 환경 과 역할 도 메 인 체인 에 관 한 지식 을 연구한다.
1.3 자 바스 크 립 트 의 블록 급 작용 역 에 대해 자 바스 크 립 트 는 블록 급 작용 역 이 존재 하지 않 으 며 함수 만으로 하나의 작용 역 을 단독으로 개척 할 수 있다.이전 단계 의 고전 코드 를 비교 하여 블록 급 역할 영역 과 다음 의 패 킷 예열 을 위 한 것 입 니 다.
//html
- 1
- 2
- 3
- 4
- 5
//js
var lists = document.querySelectorAll('li')
console.log(lists)
for(var i=0;i
【demo】
li
를 클릭 하고 콘 솔 에서 몇 번 째 li
의 아래 표 시 를 팝 업 하 는 것 이 었 으 나 실제 팝 업 은 모두 5 였 다.i
은 그 당시 i
를 저장 합 니 다.i=5
클릭 사건 을 촉발 할 때 호출 함수 console.log(i)
는 5 가 됩 니 다.i
를 저장 할 수 있 는 블록 급 역할 도 메 인 을 만들어 야 한다.2. 함수 즉시 실행
즉시 실행 함수 (Immediately - Invoked Function Expression, IIFE) 란 함수 성명 후 즉시 이 함 수 를 호출 하 는 것 입 니 다. 구체 적 인 작성 방법 은:
(function(){
console.log(1)
})();
//1
(function(a){
console.log(a)
})(5);
//5
초보 자 들 은 함수 의 작성 법 을 즉시 집행 하 는 것 에 대해 이상 하 게 생각 할 수 있 지만 사실은 js 뒤의 해석 원 리 를 이해 하기 만 하면 그 규칙 을 쉽게 파악 할 수 있다.즉시 실행 함 수 는 익명 함수 와 두 개의 괄호 로 구성 되 어 있 으 며 익명 함 수 를 첫 번 째 괄호 안에 넣 습 니 다.
1.()();
2.function(){};
3.(function(){})()
이러한 쓰기 가 나타 난 이 유 는 js 기본 줄 에 나타 난 함수 가 구문 (성명 식) 으로 해석 되 었 습 니 다.
//
function(){};
//
var f = function(){}
문장 뒤에 괄호 가 직접 나타 나 면 오 류 를 보고 할 수 있 습 니 다. 괄호 를 통 해 문 구 를 묶 어서 js 를 표현 식 으로 식별 한 다음 에 괄호 를 추가 하여 즉시 호출 하여 즉시 실행 함 수 를 실현 합 니 다.
function(){}();//
(function(){})()//
즉시 실행 함수 의 장점 은:
3. 폐쇄 지식 포인트
3.1 폐쇄 란 무엇 인가
앞에서 실행 환경 과 역할 도 메 인 체인 에 대해 말 했 습 니 다. 우 리 는 실행 환경 이 변 수 를 정의 하고 다른 데 이 터 를 방문 할 권리 가 있 으 며 함수 가 역할 도 메 인 을 만 들 수 있다 는 것 을 알 고 있 습 니 다.만약 에 우리 가 지금 이런 수요 가 있다 면 외부 환경 에서 도 내부 환경 에 접근 할 수 있 는 변 수 를 원한 다 면 어떻게 실현 할 것 인가?여기 서 패 킷 을 끌 어 내 는 개념 이 필요 합 니 다. 패 킷 (closure) 은 다른 함수 내부 변 수 를 방문 할 수 있 는 함 수 를 말 합 니 다.
function outer(){
var a = 1;
function inner(){
return a
}
return inner
}
var result = outer();
result();//1
3.2 폐쇄 적 인 의미 와 주의 점 사용
패 킷 을 사용 하 는 의미 패 킷 의 의 미 는 함수 의 패 키 징 을 실현 하고 변 수 를 모두 함수 내부 에 밀봉 하 며 전체 환경 을 오염 시 킬 걱정 없 이 인터페이스 만 노출 시 키 고 내부 의 코드 논리 에 관심 을 가 질 필요 가 없다 는 것 이다. 예 를 들 어 대상 의 개인 속성 과 방법 을 패 키 징 하 는 것 이다.
function Animal(name){
var _age;
function setAge(age){
_age = age
};
function getAge(){
return _age
}
return {
name:name,
setAge:setAge,
getAge:getAge
}
}
var cat = Animal('cat');
cat.setAge(12)
cat.getAge()//12
_age
과 사유 방법 setAge
, getAge
을 봉 하여 하나의 대상 을 인터페이스 로 노출 시 켰 다.var cat = Animal('cat')
이 코드 가 실 행 된 후에 이치 에 따라 함수 Animal
라 는 활동 대상 을 소각 합 니 다. 실제 이 활동 대상 은 메모리 에 존재 합 니 다.return {...}
이 대상 의 개인 적 인 방법의 역할 도 메 인 체인 이 아직도 이 Animal
활동 대상 을 인용 하고 있 기 때문이다.return {...}
의 이 대상 이 소 각 된 후에 야 Animal
활동 대상 이 소 각 될 수 있 고 메모리 가 방출 될 수 있다.다음 코드 를 추가 하여 메모리 방출 가능: var cat = Animal('cat');
cat.setAge(12)
cat.getAge()//12
cat = null
3.3 패키지 의 구체 적 인 응용
이전 코드 로 돌아 가기:
//html
- 1
- 2
- 3
- 4
- 5
//js
var lists = document.querySelectorAll('li')
console.log(lists)
for(var i=0;i
list
을 클릭 하면 콘 솔 에서 출력 i
합 니 다.var lists = document.querySelectorAll('li')
console.log(lists)
for(var i=0;i
【demo】
4. 소결
전체 문장 을 통 해 우 리 는 알 게 되 었 다.
arguments
함수 내부 사용 var
정 의 된 변수 와 외부 변수;null
을 사용 하여 소각 할 수 있다.참고 자료
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.