[TIL] Git Merge와 JS 렉시컬 스코프

샤이니·2023년 4월 2일
0

learned.log

목록 보기
11/46

오늘의 나는 무엇을 잘했을까?

  1. 어제의 실수(git rebase & merge)로 등골이 오싹해져 관련한 내용을 추가로 찾아 공부했다. 케니가 알려준 블로그를 보면서 git merge에 대해 확실하게 익힐 수 있었다.

오늘의 나는 무엇을 배웠을까?

[1] Git의 다양한 Merge Type들

[2] 렉시컬 스코프 (데일리 미션)

스코프란?

스코프(Scope)란 식별자가 유효한 범위를 말합니다.

어렵게 말하기

  • 즉 모든 식별자(변수 이름, 함수 이름, 클래스 이름 등)는 자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효 범위가 결정됩니다.

스코프의 주요 규칙

  1. 스코프는 중첩이 가능합니다. 스코프가 계층적으로 연결된 것을 스코프 체인이라고 합니다.
  2. 안쪽 스코프에서 바깥쪽 스코프로 접근할 수 있지만 반대는 불가능합니다.
  3. 지역 변수는 전역 변수보다 우선순위가 더 높습니다.

1. 함수 스코프 - var

var을 사용해 선언한 변수는 함수 스코프를 가집니다. 생성된 함수 내에서만 사용할 수 있고, 함수 내부에서 선언된 것이 아니면 전역 범위를 가집니다.

2. 블록 스코프 - let, const

중괄호 { } 사이의 범위를 가집니다. 즉 지역 변수(함수, 클래스)라고 할 수 있습니다.

3. 랙시컬 스코프(Lexical Scope) = 정적 스코프(Static Scope)

중첨된 함수 그룹에서 내부 함수가 상위 범위의 변수 및 기타 리소스에 접근 할 수 음을 의미합니다.

  • 즉, 함수를 어디서 선언하였는지에 따라 상위 스코프를 결정한다는 뜻입니다.
    • 중요한 것은 함수를 어디서 호출하는 지가 아니라 어디에 선언하였는지에 따라 결정된다는 것입니다.
var x = 1; 

// 전역에서 first 선언
function first() {
  var x = 10;
  second();
}

// 전역에서 second 선언
function second() {
  console.log(x);
}

first(); // 1
second(); // 1

이처럼 자바스크립트를 비롯한 대부분의 프로그래밍 언어는 렉시컬 스코프를 따릅니다.

🤔 동적 스코프(dynamic scope)도 있을까?

있습니다! 동적 스코프는 정적 스코프(=렉시컬 스코프)와 달리, 함수를 어디서 호출했는지에 따라 함수의 상위 스코프를 결정합니다.

다시 문제로 돌아가서..

var x = 'foo';

function foo() {
	var x = 'bar';
	bar();
}

function bar() {
	console.log(x);
}

foo();
bar();

console.log(x)를 가진 bar() 함수는 전역에서 선언되었습니다. 따라서 foo() 안에서 bar()이 호출되었지만, 변수 x의 스코프는 전역입니다!

따라서 결과는

foo
foo

가 출력됩니다.

출처
스코프와 변수 선언 키워드 차이점

오늘의 나는 어떤 어려움이 있었을까?

  1. TIL을 정리하다가 너무 많은 시간을 투자했다. 배보다 배꼽이 더 큰 느낌.. 앞으로는 30분 내외로 시간을 제한해서 작성해야겠다.

  2. Weekly Mission의 모바일에 따른 반응형을 어떻게 해아할 지 걱정이었다. 하지만 팀원이 미디어 쿼리를 쓰면 된다고 조언해줘서 큰 도움이 되었다. 그치만, 있는 걸 가져다 써보기만 했지 제대로 공부해본 적이 없어서 걱정이 된다. 진도를 살짝 벗어나는 개념인데.. 반응형 퍼블리싱 강의를 듣고 미션을 시작할지 고민이 됐다. 결론은 내일 미디어 쿼리에 대해 공부 후 미션 완성하기가 목표이다!

내일의 나는 무엇을 해야할까?

0개의 댓글