패스트캠퍼스 데브캠프

김민태의 데브캠프 2기 - javascript 관련 지식 + 1하기

vitamin3000 2024. 10. 31. 12:08

당신은 코드에서 언제 세미콜론을 붙이고 있는지 알고 있는가?

 

function ex1() {
	return false;
}

const ex2 = function() {
	return true;
};

 

위와 아래중 어떤 것이 } 뒤에 ;을 붙일까!?

답은 ex2이다.

그 이유는 ex1는 함수 자체에 대한 정의이고, ex2는 함수를 값 취급에 대한 정의이기 떄문이다.

 

 

2. scope( 코드에서 값의 유효범위)

 

변수는 전역변수와 로컬변수로 나뉘는데, 전역 변수는 보통 main보다 위에 선언하여 범위가 가장 위에 있기 때문에 선언 아래 어디서든 사용할 수 있다.

switch, if 등 키워드를 제외한 값(변수 이름)을 식별자라 하는데, 식별자 찾기는 scope를 바탕으로 가장 가까운 바깥 스코프 부터 찾는다.

 

3. 얕은 복사와 깊은 복사

간단히 설명하자면 얕은 복사는 값만 복사, 깊은 복사는 변수의 메모리 주소값을 복사하여 같이 사용하는 것이다.

let x = 10;
let y = x; 

console.log(x)
console.log(y);

y = 20;

console.log(x)

 

위 코드를 실행하면 어떤 값이 나올까?

x = 10

y = 10

x = 10

값이 나올 것이다.

왜냐하면 y는 x를 참조하고 있었기 때문에 y의 값을 수정해도 x에 영향을 끼치지 않기 떄문이다.

역으로 x의 값을 변경한다면? y의 값도 변경될것이다.

 

4. 다음은 강사님께서 중요하다고 말씀하신 호이스팅에 대한 내용이다.

function myTask(){
	var x = 10;
    
  x = x + y; //호이스팅으로 인해 y변수가 이미 만들어져 있음 (값은 할당 안되어 있으므로 undefined)
  			 // 따라서 x는 '10undefined' 문자열이 된다.
  if (x > 10) {
  	var y = 100;
  	}
  }

변수 선언자를 var로 선언한 경우 호이스팅이 적용,

let과 const도 호이스팅이 발생하긴 하지만 값이 할당되지 않은 경우라 판단하고, "변수"is not defined(참조에러) 에러가 출력되고 프로그램 자체를 종료시킨다.

떄문에 var보다는 let을 권장한다.

 

왜냐하면 의도치장ㄶ게 프로그램이 동작되는 것보다 프로그램이 종료되는 것이 "더" 좋기 때문이다.