외부함수 안에 내부함수가 있는 경우
javaScript의 유효범위 체인을 이용하여 이미 생명 주기가 끝난 외부 함수의 변수를 참조하는 방법입니다
외부 함수가 종료되더라도 내부함수가 실행되는 상태면 내부함수에서 참조하는 외부함수는 닫히지 못하고 내부함수에 의해서 닫히게 되어 클로저라 불리 웁니다.
따라서 클로저란 외부에서 내부 변수에 접근할 수 있도록 하는 함수입니다.
function aaa(){
function bbb(){
console.log("안녕하세욤")
}
}
aaa()
function aaa(){
return function bbb(){
console.log("안녕하세욤")
}
}
aaa()
ƒ bbb(){
console.log("안녕하세욤")
}
aaa()()
VM324:3 안녕하세욤
(aaa())()
VM324:3 안녕하세욤
여기서 aaa함수안에 있는 함수 bbb의 이름은 전혀 상관이 없다 어짜피 함수는 aaa가 실행될 것이기 때문이다
스코프체인에 의해 내부함수에서 외부함수의 지역변수가 실행되는데 지역변수가 담겨있는 이 영역을 클로져라고 부른다