Weekly Paper

[Weekly Paper] 렉시컬 스코프(Lexical scope)에 대해

시니철 2024. 9. 25. 20:23

1️⃣ 렉시컬 스코프(Lexical scope)에 대해 설명해 주세요.

렉시컬 스코프는 변수의 유효 범위가 함수의 정의 위치에 따라 결정되는 규칙입니다. 자바스크립트에서 함수가 어디에 선언되었는지에 따라 해당 함수가 접근할 수 있는 변수가 정해지며, 이는 함수의 호출이 아닌 선언에 따라 결정됩니다. 

 

주요 특징

  • 상위 스코프 접근 : 중첩된 함수는 자신이 정의된 상위 함수의 변수에 접근할 수 있습니다.
  • 하위 스코프 접근 불가 : 상위 함수는 하위 함수에서 선언된 변수에 접근할 수 없습니다.
  • 정의 시점 : 함수가 호출되는 시점이 아닌, 정의된 시점에 따라 변수가 결정됩니다.
// 예시
function outerFunc() {
    let outerVar = 'outer';

    function innerFunc() {
        console.log(outerVar);  // 'outer' 출력
    }
    
    innerFunc();
}

outerFunc();

 

위 코드의 `innerFunc` 함수는 `outerFunc` 함수 내부에 위치하며 outerVar에 접근할 수 있습니다. 렉시컬 스코프에 따라, `innerFunc` 함수는 자신의 위치인 `outerFunc` 함수의 상위 스코프에 있는 변수를 사용할 수 있기 때문에 `console.log(outerVar);`가 정상적으로 출력합니다.

// 에러 예시
function outerFunc() {
    function innerFunc() {
        let outerVar = 'outer';
    }

    console.log(outerVar);  // ReferenceError 발생
    innerFunc();
}

outerFunc();

 

두 번째 예제에서는 outerVar가 `innerFunc` 함수 내부에 위치하고 있습니다. 하지만 `console.log(outerVar);`가 `innerFunc` 함수 호출 이전에 작성되었기 때문에, `outerFunc` 함수의 스코프에서 outerVar를 찾을 수 없습니다. 결과적으로 outerVar는 정의되지 않은 상태이므로 ReferenceError가 발생합니다.


2️⃣ HTTP 메소드에 대해 설명해 주세요.

`HTTP` 메소드란 클라이언트(사용자)와 서버 간에 데이터를 주고받는 방식입니다. 웹에서 정보를 요청하거나 전송할 때, 서버는 각기 다른 `HTTP` 메소드를 통해 요청을 처리합니다. 예를 들어, 페이지를 불러오거나 데이터를 전송하거나 수정하는 등의 작업을 수행할 때, 특정 메소드를 사용해 서버에 요청할 수 있습니다.

 

`GET`

서버에서 데이터를 요청합니다. 주로 리소스의 조회에 사용되며, 요청 시 URL에 쿼리 문자열을 포함할 수 있습니다.

`POST`

서버에 데이터를 전송하여 새로운 리소스를 생성합니다. 주로 폼 데이터 전송에 사용되며, 요청 본문(body)에 데이터가 포함됩니다.

`PUT`

지정된 리소스를 업데이트 하거나 새로 생성합니다. 요청 본문에 업데이트할 데이터를 포함하며, 클라이언트가 리소스의 전체 표현을 전송해야 합니다.

`PATCH`

리소스의 일부를 수정합니다. 요청 본문에 수정할 데이터의 부분적인 표현이 포함됩니다.

`DELETE`

지정된 리소스를 삭제합니다. 서버에서 해당 리소스를 제거하는 요청을 보냅니다.

`HEAD`

GET 요청과 유사하지만, 응답 본문 없이 헤더만 요청합니다. 주로 리소스의 메타 데이터를 확인하는 데 사용됩니다.

`OPTIONS`

서버가 지원하는 HTTP 메소드를 요청합니다. 특정 리소스에 대해 어떤 메소드가 가능한지를 확인할 수 있습니다.

`CONNECT`

프록시 서버와의 터널링을 위해 사용됩니다. 주로 SSL/TLS 연결을 설정하는 데 사용됩니다.

`TRACE`

요청이 서버에 도달하는 경로를 추적합니다. 서버는 클라이언트가 보낸 요청을 그대로 되돌려 보냅니다.

 

주요 메소드는 `GET`, `POST`, `PATCH`, `DELETE`이며, 위 메소드들은 웹 애플리케이션에서 데이터 CRUD(Create, Read, Update, Delete) 작업을 수행하는 데 사용됩니다.