JS 스코프 클로저 7/11

waymo·2022년 7월 11일
0
post-thumbnail

💻 Unit 10

💡스코프 란?

스코프(Scope, 유효범위)

참조 대상 식별자(identifier, 변수 , 함수의 이름과 같이 어떠한 대상을 다른 대상과 구분하여 식별할 수 있는 유일한 이름)를 찾아내기 위한 규칙

Variable"visiblity"
The location where a variable is define dictates where we have access to that variable

🌎 전역 스코프

전역 스코프 (Global Scope)

  • 가장 바깥쪽 스코프
  • 어디에서든지 참조할 수 있다.

🏠 지역 스코프

지역 스코프 (local scope)

  • 전역이 아닌 다른 스코프
  • 함수 몸체 내부
  • 자신이 선언된 지역과 하위 함수에서 참조 가능하다.

스코프 주요규칙

  • 변수에 접근할 수 있는 범위가 존재한다.
  • 안쪽 스코프에서 바깥쪽 스코프로는 접근할 수 있지만, 바깥쪽에서 안쪽스코프로는 불가능하다.
  • 지역 변수는 전역 변수 보다 더 높은 우선순위를 가진다.
  • 바깥쪽 변수가 지역 변수에 의해 가려지는 현상을 쉐도잉(Variable shadowing)이라고 한다.

📍함수레벨 블록레벨

📌 함수레벨 스코프

  • 함수 코드블럭만 지역 스코프로 인정하는 것이다.
  • var이 여기에 해당한다.

❗ var

  • 자바스크립트에서는 var 키워드로 선언한 변수들은 전역 스코프를 가진 전역 변수로 전역객체(Global Object) window의 프로퍼티이다.
  • 변수 중복 선언을 허용하여 의도치 않게 값이 변경되는 불상사가 일어날수 있다.
  • 함수 외부에서 var키워드로 선언한 변수는 코드 블록 내에서 선언해도 모두 전역 변수가 된다. 선언 없이 변수를 할당시 해당 변수는 var로 선언한 전역변수 취급한다.
  • 변수 호이스팅 , 변수 선언문 이전에 참조 가능하다.

📌 블록레벨 스코프

  • 중괄호로 이루어진 모든 코드블록을 지역 스코프로 인정하는 것이다.
  • ES6 이후 생긴 letconst가 여기에 해당한다.
  • 중괄호를 기준으로 범위가 구분된다.
  • 화살표 함수는 블록스코프로 취급된다
  • 중복 선언시 문법 에러(Syntax Error)가 발생한다.

스코프 체인

자바스크립트 엔진은 식별자를 찾을때 일단 자신이 속한 스코프에서 찾고 그 스코프에 식별자가 없을시 상위 스코프에서 다시 찾아 나간다. 이 현상을 스코프 체인이라고 한다.
스코프가 중첩되어 있을때 발생한다.

렉시컬 스코프 (Lexical Scope)

함수를 어디서 호출하는지가 아니라 어디에 선언하였는지에 따라 상위 스코프를 결정하는 것!
정적 스코프라고도 불리운다.
중첩된 함수나 내부 함수는 상위 몇 레벨 위에 있든 상관 없이 부모 함수나 조부모 함수 등이 액세스하는 동일한 항목에 액세스 할 수 있다.


클로저 (Closure)

"함수와 함수가 선언된 어휘적(lexical) 환경의 조합을 말한다. 이 환경은 클로저가 생성된 시점의 유효 범위 내에 있는 모든 지역 변수로 구성된다." -MDN

함수를 리턴하는 함수, 함수와 함수가 선언된 형태

클로저의 핵심은 스코프를 이용해서, 변수의 접근 범위를 닫는(closure; 폐쇄) 데에 있다.

클로저 함수는 외부 함수의 실행이 끝나더라도, 외부 함수 내 변수가 메모리 상에 저장되어 있다.
즉, 외부함수가 실행이 끝나도 내부함수가 외부함수의 변수에 접근 할 수 있다!

profile
FE 개발자(진)가 되고 싶습니다

0개의 댓글