자바를 메인으로 가르치는 국비학원에서 자바스크립트는 사실 겉핥기보다 더 얕게 배웠다.
거의 Jquery만 알려주는 정도? 그 이후에 프론트엔드 개발자가 되기로 결정한 나는 남들이 자바를 배우는 동안 열심히 자바스크립트를 혼자 공부했다... 그리고 클로져를 처음 보고 응? 이라는 애매한 개념 정리와 함께 넘어가고, 다른 문법들을 더더욱 공부했다.
function add1(a, b) {
return a + b
}
add1(6, 11) // 17
위에 만들어진 add1()함수를 보면 이 글을 읽는 누구나 이해하듯이 17이라는 값이 반환될 것이라는 것을 예측할 수 있다.
function add1(a, b) {
return a + b
}
let poison = 0
function add2(a, b) {
return a + b + position
}
poison = 3
add1(6, 11) // 17
add2(6, 11) // 20
여기서 add2()함수를 보게 된다면 add2함수의 반환되는 값은 눈치채듯이 add1과는 다르게 반환될 것이다. 여기서 보듯이 add2()함수에서 poison이라는 외부 변수와 함수가 합쳐진 것을 클로져 라고 말한다.
+++ add1()은 순수함수이다.
자바스크립트 함수는 모든 함수가 클로져 함수라고 해도 틀린 말은 아니다. 그래서 이미 모르고 사용하던 존재를 개념화시켜 이해하려고 하니 더 헷갈린다고 생각한다.
ex1.자바처럼 annotation을 사용하는 문법
function add1(a, b) {
return a + b
}
let poison = 0
@capture(poison)
function add2(a, b) {
return a + b + position
}
ex2. pure라는 키워드를 붙여 순수함수라고 명시해주는 문법
pure function add1(a, b) {
return a + b
}
let poison = 0
function add2(a, b) {
return a + b + position
}
만약 이런 식으로 자바스크립트의 문법이 클로져를 구분하게 되어있다면 더욱 이해하기 쉬웠을 거 같다.
클로저는 알고 보면 항상 우리의 곁에 존재하는 녀석이기에 이 녀석을 구분하려 하니 더 헷갈렸다.
이유는 모르겠지만 자바보다 자바스크립트가 더 재밌다 이런 정신 사나운 문법이 매력있는 녀석,,,