반응형
츄르사려고 코딩하는 코집사입니다.
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번 컵홀더 자바
2) 백준 2563번 색종이 파이썬
반응형
'자기개발 > 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 |
최근댓글