단서: m1이 count에 접근할 수 있는 이유는 m1과 count가 동일한 함수, 즉 동일한 범위에 선언되어 있지만 m2가 위치한 함수는 count와 동일한 함수에 있지 않기 때문입니다. 범위에 따라 함수에 포함된 함수 간에는 관계가 없으므로 당연히 액세스할 수 없습니다.
질문자는 module1 자체가 count와 동일한 기능에 속한다고 생각하여 module1에 메서드를 추가합니다. 이 메서드는 count와 동일한 범위에 속합니까?
어휘 범위로 인해 JS 함수에는 정적 범위가 있습니다. 즉, 함수가 정의될 때 내부 변수가 어떤 기호에 마운트되어야 하는지 결정된다는 의미입니다. m1을 내부적으로 정의하면 익명 함수가 개수를 반환합니다. 정의되면 이 함수의 외부에 있는 것으로 결정됩니다var count=0.
m2를 정의하면 익명 함수가 개수를 반환합니다. 이 개수에 대한 기호 검색은 먼저 정의 지점 내부에 있는지 확인하고 그렇지 않은 경우 상위 계층 함수 정의 지점을 확인한 다음 가장 바깥쪽 지점을 확인합니다. 전역 변수이므로 여기의 개수는 전역 변수입니다.
그래서 module1.m2()는 m1에서 정의한 count 변수에 액세스할 수 없습니다. 정적 어휘 범위로 인해 m2는 이를 추적할 수 없습니다.
단서: m1이 count에 접근할 수 있는 이유는 m1과 count가 동일한 함수, 즉 동일한 범위에 선언되어 있지만 m2가 위치한 함수는 count와 동일한 함수에 있지 않기 때문입니다. 범위에 따라 함수에 포함된 함수 간에는 관계가 없으므로 당연히 액세스할 수 없습니다.
질문자는 module1 자체가 count와 동일한 기능에 속한다고 생각하여 module1에 메서드를 추가합니다. 이 메서드는 count와 동일한 범위에 속합니까?
어휘 범위로 인해 JS 함수에는 정적 범위가 있습니다. 즉, 함수가 정의될 때 내부 변수가 어떤 기호에 마운트되어야 하는지 결정된다는 의미입니다. m1을 내부적으로 정의하면 익명 함수가 개수를 반환합니다. 정의되면 이 함수의 외부에 있는 것으로 결정됩니다
var count=0
.m2를 정의하면 익명 함수가 개수를 반환합니다. 이 개수에 대한 기호 검색은 먼저 정의 지점 내부에 있는지 확인하고 그렇지 않은 경우 상위 계층 함수 정의 지점을 확인한 다음 가장 바깥쪽 지점을 확인합니다. 전역 변수이므로 여기의 개수는 전역 변수입니다.
그래서 module1.m2()는 m1에서 정의한 count 변수에 액세스할 수 없습니다. 정적 어휘 범위로 인해 m2는 이를 추적할 수 없습니다.