시펄 다 존나 어렵게 설명해놔서 내가 이해한게 맞는지도 모르겠음.
면접에서 "클로져가 멉니까?" 라고 물었을 때 짧게 뭐라고 대답해야하나
함수 내부에서 외부 객체에 접근할 수 있는 함수특성을 클로져라고 합니다.
기본적으로 자바스크립트의 모든 함수는 클로져라고 할수있습니다. 이러냐?
let message = "hi";
function hello() {
alert(message); // "hi"
}
이렇게 alert이 외부의 message 변수에 접근 가능한게 클로져때문인거임?
존나 쉽게 잘 설명하는곳 추천좀 해주라 ㅜㅜ
해당 댓글은 삭제되었습니다.
미안하다 모른다 schema는 데이터의 형태정도로 이해하고있음. 포스트맨같은거로 클라-서버 간 통신할 때 schema를 통해서 의사소통하는거 아니냐? 정확히 이론적으론 잘 모름
이미 메모리에서 사라진 지역변수를 함수안에서 호출 가능하면 클로저
함수에서 호출가능하면 메모리에서 살아있는거 아님? 정확히는 레시컬환경에 저장된다는데
오개념 가르쳐주고 있노. 메모리에서 사라지는 거 아니다. 원래는 실행컨텍스트 종료되면서 사라져야 하는데 참조가 살아있어서 안사라지는거
js에서는 2가지 스코프가 있음 렉시컬 스코프와 동적 스코프 렉시컬 스코프는 소스코드인 상태의 스코프라고 생각하면 좋고 동적 스코프는 소스코드를 js 엔진이 읽어서 실제 실행되는 런타임 시점의 스코프임
클로저는 이 렉시컬 스코프에서 내부 값이 외부 스코프를 참조할 때 자신을 둘러싼 렉시컬 스코프의 참조를 런타임 이후에도 계속 참조 하는 것을 의미함
자세한 버전
https://meetup.toast.com/posts/86
'자신을 둘러싼 렉시컬 스코프의 참조'를 위 게이가 말한 'variable들의 바인딩 정보'정도로 이해하면 되는거야?
상위 렉시컬 스코프의 참조는 스코프 체인에 관한 얘기고 variable 바인딩 정보가 자신의 렉시컬 환경에 갱신되는거
variable 바인딩 정보가 자신의 렉시컬 환경에 갱신되는거 => 이 말이 함수의 실행 후에도 주변의 참조값들이 레시컬환경으로서 유지된다는 말이야?
위의 글에서 "일단 중요한 부분은 2~4번, 그리고 7번이다. " 이 대목을 검색해서 한번 읽어보면 나옴
예시에서 보면 bar 함수가 foo 함수안에 있지만 실행 후에는 global 영역에서 호출되는게 보일 거임 여기서 bar 함수의 outer lexical environment 가 foo로 고정된 상태가 되기 때문에 bar 함수에서 실행하면 color 값이 foo 안의 color 값으로 출력되는거임
자세한 버전 링크에도 나와 있듯이 "함수를 둘러싼 환경이라는 것이 바로 앞에서 설명했던 렉시컬 스코프이다. 함수를 만들고 그 함수 내부의 코드가 탐색하는 스코프를 함수 생성 당시의 렉시컬 스코프로 고정하면 바로 클로저가 되는 것이다."
오호 게이 설명 기가 막히노 고맙다
렉시컬 스코프, 렉시컬 환경이니 이런건 쓸데 없이 어렵게 설명한거 같고 그냥 간단히 말하면 소스코드 상에 참조한 변수, 함수, 객체 등의 값이 실행 이후에는 전혀 다른 스코프에 있어도 그 참조가 그대로 유지 되면 클로저라고 보면 됨. 그냥 링크한 글 여러 번 읽어봐 그게 제일 좋을듯
예제 풀어보니 좀 알거같은데 암튼 여러번 읽어봐야겠당 ㅇㅇ 특히 디버깅할때 진짜 중요한 지식같음 ㅇㅇ