JavaScript 마스터하기 🧑💻: 클로저
이 게시물에서는 클로저가 예제를 사용하여 코드를 더 잘 작성하는 데 사용할 수 있도록 설명합니다.
어휘 범위 ✍️
클로저가 무엇인지 직접 설명하기 전에 범위(scope)와 어휘 범위(lexical scope)의 개념을 설명하는 것이 적절합니다.
함수의 범위는 변수가 "보이고"사용할 수 있는 코드 영역을 나타냅니다.
한 함수 내에서 다른 함수가 생성되면 다른 내부 범위가 생성되는 식으로 이를 범위 체인이라고 합니다.
정적 범위라고도 하는 어휘 범위는 함수 정의 위치에 따라 액세스할 수 있는 변수가 결정되는 시기를 나타냅니다.
예를 들어 :
const life = () => {
const pastEvents = 'past'
//console.log(actualEvents) this will create an error because that inner variable is not accesible here
const present = () => {
const actualEvents = 'present'
console.log(pastEvents, actualEvents)//ok
//console.log(futureEvents) same for this one
const future = () => {
const futureEvents = 'future'
console.log(pastEvents, actualEvents, futureEvents)//ok
}
future()
}
present()
}
life()
/*
Outputs:
past present
past present future
*/
보시다시피 중첩된 함수 그룹에서 내부 함수는 부모 범위의 변수 및 기타 리소스에 액세스할 수 있습니다.
폐쇄 🪆
이전의 코드를 약간 변경해 보겠습니다.
const life = () => {
const pastEvents = 'past'
const present = () => {
const actualEvents = 'present'
console.log(pastEvents, actualEvents)
const future = () => {
const futureEvents = 'future'
console.log(pastEvents, actualEvents, futureEvents)
}
return future
}
return present
}
const newFunc = () => {
//different scope
const newLife = life()
const future = newLife()
future()
}
newFunc()
/*
Outputs:
past present
past present future
*/
newFunc 함수 내에서 생성된 새 함수는 변수 pastEvents, actualEvents 및 futureEvents가 다른 범위에 있더라도 액세스할 수 있습니다.
이는 future와 present 함수가 클로저이기 때문입니다. 변수에 할당될 때(우리의 경우 newLife와 future) 어휘 범위의 변수를 닫습니다(여기서 클로저라는 용어).
이로 인해 클로저는 메모리 효율적인 저장 코드 반복입니다.
여기 또 다른 예가 있습니다:
const addTo = x => y => x + y //x = outer func; y = inner.
const addToTen = addTo(10)
addToTen(3) // returns 13
그들이 가져오는 또 다른 이점은 데이터 캡슐화입니다.
const createCounter = () => {
let count = 0
return {
increment() {
count++
},
decrement() {
count--
},
showCount() {
console.log(count)
}
}
}
const myCounter = createCounter()
for(let i = 0; i < 100; i++)
myCounter.increment()
myCounter.decrement()
console.log(myCounter.count)//returns undefined
myCounter.showCount()//returns 99
이런 식으로 count 변수는 비공개이며 개발자가 작성한 적절한 함수를 통해서만 액세스할 수 있습니다.
결론
여기까지 읽으셨다면 감사합니다. 게시물이 마음에 드셨다면 좋아요를 남겨주시고 제 다른 게시물도 확인해주세요 🙂.
Reference
이 문제에 관하여(JavaScript 마스터하기 🧑💻: 클로저), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/saverio683/mastering-javascript-closures-3ij8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)