JavaScript 폐쇄 함수 및 그 역할

알다
사례:
페이지 에 5 개의 li 라벨 이 있 습 니 다. 라벨 은 0 ~ 45 개의 숫자 를 표시 하고 서로 다른 탭 을 클릭 하여 콘 솔 에서 라벨 의 색인 을 인쇄 합 니 다.
주 코드:
	 
  • 0
  • 1
  • 2
  • 3
  • 4
var liList=document.getElementsByTagName("li"); for(var i=0;i<liList.length;i++){ liList[i].onclick=function(){ console.log(i); } }

주요 설명:
너 라면 이렇게 쓰 지 않 을 까?
이렇게 쓰 면 그 탭 을 누 르 든 숫자 '5' 가 인쇄 되 어 있 음 을 알 수 있 습 니 다.클릭 동작 을 실행 할 때 for 순환 이 완료 되 었 고 i 값 은 '5' 이기 때 문 입 니 다.그러면 어떻게 해야만 매번 순환 할 때 i 가 시스템 에 의 해 회수 되 지 않도록 저장 할 수 있 습 니까?가방 을 닫 아 라!
코드 수정:
         
  • 0
  • 1
  • 2
  • 3
  • 4
var liList=document.getElementsByTagName("li"); for(var i=0;i<liList.length;i++){ liList[i].onclick=(function(j){ return function(){ console.log(j); } })(i); }

코드 설명:
두 함수 가 끼 워 넣 으 면 내부 함수 가 외부 함수 의 변수 나 파 라 메 터 를 사용 하면 패 킷 이 됩 니 다.패 킷 이 형 성 된 후 내부 함수 의 변 수 는 대응 하 는 함수 메모리 에 저장 되 며 위의 코드 에서 내부 함수 변 수 는 제때에 제거 되 지 않 습 니 다.
2. 패키지 의 정의
1. 함수 내장 함수
2. 내부 함수 접근 호출 외부 함수 변수 나 매개 변수 (매개 변수 나 변 수 를 메모리 에 장기 저장)
3. 폐쇄 적 역할
1. 공유 변수 구현 (함수 누산기) 
function add(){
		var num = 0;
		function a(){
			console.log( ++ num);
		}
		return a;
	}
	var myadd = add();
	myadd();//   1
	myadd();//   2
	myadd();//   3

2. 캐 시 가능 (저장 구조)   3. 패 키 징, 속성 민영화 (민영화 변수) 를 실현 할 수 있 습 니 다.  
function Deng(name,wife){
	var prepareWife = "xiaozhang";
	this.name = name;
	this.wife = wife;
	this.divorce = function(){
		this.wife = prepareWife;
	}
	this.changePrepareWife = function(target){
		prepareWife = target;
	}
	this.sayPrepareWife = function(){
		console.log(prepareWife);
	}
}
	var deng = new Deng('deng','xiaoliu');

좋은 웹페이지 즐겨찾기