렉시컬 스코프란(Lexical Scope)란?
직역해석하자면 어휘적 범위라고 하는데 매끄러운 느낌은 아니라 정적 범위, 정적스코프라고 해석하고 , "정의된 특정 구역 내에서 사용하는 스코프" 라고 이해하는 것이 제일 편한 것 같았습니다.
렉시컬 스코프란, 함수를 어디서 호출하는지가 아닌 어디에 선언하였는지에 따라 결정되는 것을 말합니다.
즉, 함수를 어디서 선언하였나에 따라 상위 스코프를 결정한다는 것을 뜻합니다.
아래 코드를 보며 더욱 자세히 알아봅시다.
var x = 1;
function foo() {
console.log(x);
}
function bar(){
var x = 10;
foo();
}
bar(); // ?
x는 1로 출력 됩니다.
bar안에서 foo를 호출했으니, x 값을 bar안에서 찾는 것이 아닌가라고 생각할 수 있겟지만, 그렇지 않습니다.
함수를 어디서 호출하는지가 아닌 처음에 어떤 스코프에 선언하였는지에 (var x = 1) 따라 변수의 실제 값이 결정됩니다.
즉, 스코프란 코드를 실행하면서 바뀌는 것이 아닌 처음 작성한 그 스코프로 결정됩니다.
따라서, foo는 bar에서 호출되든 어떤 함수 안에서 호출되든지 상관없이 무조건 자신의 스코프를 보고 그 이후엔 전역 스코프를 찾습니다.
그러면, global이 아닌 bar로 출력되게 하고 싶으면 어떻게 할까?
bar함수 안에서 text 변수를 새로 선언할 것이 아니라,
맨 처음에 전역범위에 선언했던 text변수의 값을 바꾸어 주면 된다.
전역으로 선언한 x의 값을 변경시켜주려면새로 선언을 하는 것이 아니라 아래 코드처럼 맨 처음 선언했던 x의 값만 변경시켜주면 됩니다.
var x = 1;
function foo() {
console.log(x);
}
function bar(){
var x = 10;
foo();
}
bar(); // 10 출력!
여담으로, 앞서 설명한 것과 반대되는 개념을 가진 동적 스코프는 함수를 어디서 호출하는지에 따라 결정되는데 렉시컬스코프처럼 일반적이고 다수의 프로그래밍 언어가 사용하지 않고, Bash Scripting이나 Perl 의 일부 모드와 같은 몇몇 언어에서 사용하는 방식이라 합니다.
HTTP 메소드
클라이언트, 서버 구조에서 요청과 응답이 이루어지는 방식입니다.
즉, 서버가 수행해야 할 동작을 지정해 요청을 보내는 방법이라고 할 수 있습니다.
메서드 이름 | 설 명 |
GET | 특정 리소스의 표시를 요청합니다. GET을 사용하는 요청은 오직 데이터를 받기만 합니다. |
POST | 특정 리소스에 엔티티를 제출할 때 쓰입니다. 이는 종종 서버의 상태의 변화나 부작용을 일으킵니다. |
PUT | 특정 리소스를 덮어쓰기 합니다. (해당 리소스가 없으면 생성) |
PATCH | 특정 리소스를 부분 변경 합니다. (PUT은 전체 변경이지만, PATCH는 일부만 변경) |
DELETE | 특정 리소스를 삭제합니다. |
HEAD | GET과 동일하나 메시지 부분(Body)를 제외하고, 상태 줄과 헤더만 반환 합니다. |
OPTIONS | 대상 리소스에 대한 통신 가능 옵션(메서드)을 설명합니다. (주로 CORS에서 사용) |
CONNECT | 대상 자원으로 식별되는 서버에 대한 터널을 설정합니다. |
TRACE | 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행합니다. |
HTTP 메서드 속성??
HTTP 메소드는 속성에는 다음과 같이 3가지 속성이 있으며 해당 속성별로 메서드를 구분할 수 있습니다.
Safe Methods(안전한 메서드)
호출해도 리소스를 변경하지 않는다는 특징을 갖습니다.
( GET, HEAD, OPTIONS, TRACE )
Idempotent Methods(멱등성)
한 번 호출하든 여러번을 호출하든 결과는 똑같은(멱등성) 특징을 갖습니다.
(GET, PUT, DELETE, POST)
Cacheable Methods(캐싱 가능)
응답 결과를 서버에 캐싱해서 사용해도 되는 메소드를 의미합니다.
(GET, HEAD, POST, PATCH)