스코프

어승준·2023년 10월 21일

JS 스터디

목록 보기
20/26
post-thumbnail

📌 스코프 체인을 통한 식별자 탐색 과정은 어떻게 진행되는 지 설명해주세요.

  • 변수 z가 if 블럭 스코프에 존재하지 않으므로 상위 inner 함수 스코프를 탐색합니다.
  • 변수 z가 inner 함수 지역 스코프에 존재하지 않으므로 상위 outer 함수 스코프를 탐색합니다.
  • 변수 z가 outer 함수 지역 스코프에 존재하지 않으므로 상위 전역 스코프를 탐색합니다.
  • 변수 z가 전역 스코프에 존재하지 않으므로 ReferenceError가 발생합니다.

📌 스코프가 필요한 이유와 함수/블록 레벨 스코프의 차이를 알려주세요

  • 스코프가 필요한 이유
    • 의도치 않은 변수 값의 변조를 방지
      • 특히 외부 API 라이브러리와 연동하여 사용할 때 같은 변수명끼리 충돌이 생기는 것을 방지할 수 있다.
    • 효율적인 메모리 관리
      • 코드 블럭 안의 참조값들은 코드가 실행 될 때만 메모리에 할당되는 것이 효율적이다.
  • 함수 레벨 스코프(Function-level Scope)
    함수 내에서 선언된 변수는 함수 내에서만 유효하며 함수 외부에서는 참조할 수 없다. 즉, 함수 내부에서 선언한 변수는 지역 변수이며 함수 외부에서 선언한 변수는 모두 전역 변수이다.
  • 블록 레벨 스코프(Block-level Scope)
    모든 코드 블록(함수,if문,for문,while문,try/catch문 등)내에서 선언된 변수는 코드 블록 내에서만 유효하며 코드 블록 외부에서는 참조할 수 없다. 즉, 코드 블록 내부에서 선언한 변수는 지역 변수이다.

📌 스코프와 스코프 체인에 대해 설명해 주세요.

  • 스코프란, 식별자의 유효 범위를 말한다.
  • 스코프가 필요한 이유
    • 의도치 않은 변수 값의 변조를 방지
      • 특히 외부 API 라이브러리와 연동하여 사용할 때 같은 변수명끼리 충돌이 생기는 것을 방지할 수 있다.
    • 효율적인 메모리 관리
      • 코드 블럭 안의 참조값들은 코드가 실행 될 때만 메모리에 할당되는 것이 효율적이다.
  • 스코프 체인이란, 자바스크립트 엔진은 변수(식별자)를 찾을 때 일단 자신이 속한 스코프에서부터 찾아보고, 그 스코프에 찾는 변수가 없으면 상위 스코프를 타고 올라가며 차례차례 찾아 나간다. 이를 스코프 체인(Scope Chain)이라고 한다

📌 var과 let, const의 스코프에 대해 설명해주세요.

  • var은 함수에서만 지역변수가 되는 함수레벨 스코프만을 가지지만
  • let과 const는 블록레벨 스코프를 가져 모든 코드블록(if for while try/catch 등 포함)이 지역 스코프를 가집니다.

📌 동적 스코프와 렉시컬 스코프를 설명하고 JS는 어떤 방식을 따르는지 말해주세요.

  • 동적 스코프 - dynamic scope는 함수가 실행되는 위치에 따라서 함수의 상위 스코프를 결정합니다.
  • 렉시컬 스코프 - lexical scope는 함수가 정의된 위치에 따라서 함수의 상위 scope를 결정합니다. 그래서 이 방식을 static scope(정적 스코프)라고도 부릅니다.
  • 렉시컬 스코프
profile
鈍筆勝聰(둔필승총) : '둔한 붓이 총명함을 이긴다' (서툴더라도 기록으로 남기는 것이 사람의 기억보다 훨씬 오래 보전된다) - 정약용

0개의 댓글