[JavaScript] 클로저(Closures)란 무엇일까?
대다수의 프로그래밍 언어와 마찬가지로 자바스크립트 또한 어휘적 유효범위(lexical scoping)를 사용한다. 이는 함수를 호출하는 시점에서의 변수 유효범위가 아니라, 함수가 정의된 시점의 변수 유효범위를 사용하여 함수가 실행된다는 뜻이다. 이러한 어휘적 유효범위를 구현하기 위해, 자바스크립트 함수 객체는 내부 상태에 함수 자체의 코드뿐만 아니라 현재 유효범위 체인에 대한 참조도 포함하고 있다. 함수 객체와, 함수의 변수가 해석되는 유효범위(변수 바인딩의 집합)를 아울러 클로저라고 한다.
let scope = "global scope" //전역 변수
function checkscope(){
let scope = "local scope"; //지역 변수
function f() {return scope;} //이 유효범위에 있는 값을 반환한다.
return f();
}
checkscope() //=> 'local scope'
checkscope() 함수는 지역 변수를 선언한 다음, 그 지역 변수를 반환하는 함수를 정의하고 호출한다. checkscope()가 "local scope"를 반환하는 것은 명백하다. 다음 코드가 무엇을 반환할까?
let scope = "global scope" //전역 변수
function checkscope(){
let scope = "local scope"; //지역 변수
function f() {return scope;} //이 유효범위에 있는 값을 반환한다.
return f;
}
checkscope()() //=> 'local scope'
한 쌍의 괄호가 checkscope() 안에서 밖으로 이동했다. 이제 checkscope()는 중첩 함수를 호출하고 그 결과를 반환하는 대신, 중첩 함수 객체 그 자체를 반환한다.
어휘적 유효범위의 기본적인 규칙을 기억하자. 자바스크립트 함수는 함수가 정의되었을 때의 유효범위 체인을 사용하여 실행된다. 중첩 함수 f()가 정의된 유효범위 체인에서 변수 scope는"local scope"로 반인드되어 있다. f가 어디서 호출되든 상관없이, f가 실행될 때 이 바인딩은 항상 유효하다. 따라서 코드의 제일 마지막 줄은 "global scope"가 아니라 "local scope"를 반환한다. 간단히 말해서, 이것이 클로저의 강력한 특성이다. 클로저는 자신을 정의한 바깥쪽 함수에 바인딩된 지역 변수를 포착한다.
Author And Source
이 문제에 관하여([JavaScript] 클로저(Closures)란 무엇일까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mh22kim/JavaScript-클로저Closures란-무엇일까저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)