카테고리 없음
클로저 의 응용
Made Project
2020. 11. 3. 19:57
let arr = []
for(var i = 0; i < 5; i++){
arr[i] = function(){
return i;
}
}
for(var index in arr) {
console.log(arr[index]());
}
우리가 기대했던 함수가 함수 외부의 컨텍스트에 접근할 수 있을 것으로 기대하겠지만 위의 결과는 아래와 같습니다.
5가 다섯번 나옵니다.
let arr = []
for(var i = 0; i < 5; i++){
arr[i] = function(id) {
return function(){
return id;
}
}(i);
}
for(var index in arr) {
console.log(arr[index]());
}
for문이 돌때마다 arr[i] 함수가 실행이 되면
function(id) 에 id라는 매개변수값으로 i의값을 받아서
함수내부로 전달하고 있습니다. 전달을 받아서 바로 리턴을 해줍니다.
내부함수를 리턴 하고있는데 외부함수에 지역변수인 id를 리턴해 주고 있습니다.
결과는 01234 가 나옵니다. 그이유는 내부함수의 지역변수가 외부함수의 지역변수에 접근할수 있었고
그함수가 만들어지는 시점에 i값을 외부함수가 id라고 하는 지역변수로 가지고 있어서 그외부함수에 내부함수를 호출하게 되면 그지역변수인 id값을 리턴해주고 있습니다.