반응형

@notepad_jj2

츄르사려고 코딩하는 코집사입니다.


1. JavaScript 클로저를 사용하는 이유

- 아래의 코드에서 arr[0](); arr[1](); arr[2]();을 호출하면 arr 배열에는 for문이 들어가고, i가 복사되는게 아니라 i를 참조하게 된다.

- 그렇기 때문에 for문에서의 종료조건인 i가 3이 되면 for문이 종료가 되는데, 각 arr[]()은 i를 참조하게 되어 3을 출력하게 된다.

<script>
    var arr = [];
    for(var i=0;i<3;i++){        
        arr[i] = function(){
            alert(i);
        }
    }
    arr[0]();
    arr[1]();
    arr[2]();
    </script>

 

- 그래서 이 문제를 해결하기 위해 클로저를 사용해야 한다.

- 아래의 코드에서는 arr[i]에 내부함수를 또 만들어서 for문 뒤에 i가 aaaa로 들어가서 새로운 함수를 참조하도록 하여 i가 0일 때 aaaa를 물고, i가 1일 때 또 새로운 aaaa를 물고 하여 0,1,2를 출력을 할 수 있다.

var arr = [];
for(var i=0;i<3;i++){
	arr[i] = (function(aaaa){
		return function(){
			alert(aaaa)
		}
	})(i);
}
arr[0]();
arr[1]();
arr[2]();

 

- 아래의 코드에서도 poll이 asdf로 들어간다.

for(var i=0;i<6;i++){
          poll += '<div class="item">${lotto[i]}</div>'

          (function(asdf){
              setTimeout(function(){
                  console.log('아?')
                  document.querySelector('.content').innerHTML = asdf;
              }, i*1000);
          })(poll);
}

 

- 클로저 처리 기본 코드

var arr = [];

for(var i = 0; i < 6; i++){
    arr[i] = function(asdf) {
        return function(){
            return asdf;
        }
    }(i);
}

알고리즘

 

1) 백준 2810번 컵홀더 자바

yongku.tistory.com/entry/%EB%B0%B1%EC%A4%80-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%B0%B1%EC%A4%80-2810%EB%B2%88-%EC%BB%B5%ED%99%80%EB%8D%94-%EC%9E%90%EB%B0%94Java

 

2) 백준 2563번 색종이 파이썬

yongku.tistory.com/entry/%EB%B0%B1%EC%A4%80-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%B0%B1%EC%A4%80-2563%EB%B2%88-%EC%83%89%EC%A2%85%EC%9D%B4-%ED%8C%8C%EC%9D%B4%EC%8D%ACPython

반응형

'자기개발 > TIL' 카테고리의 다른 글

TIL 210901 Today I Learned  (0) 2021.09.02
TIL 20210429  (0) 2021.04.29
TIL 20210401  (0) 2021.04.01
TIL 20210331  (0) 2021.03.31
TIL 20210304  (0) 2021.03.04
TIL(Today I Learned) 20210303  (0) 2021.03.03
TIL(Today I Learned) 20210125 ~ 20210126  (0) 2021.01.26
TIL(Today I Learned) 20210123 ~ 20210124  (0) 2021.01.25
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기