Javascript - 복습

Andy.Choi·2022년 5월 21일
1

Javascript

목록 보기
4/4
post-thumbnail

아래의 코드를 보고 생각해보자!! ☝

1. 콘솔에 찍힐 b 값을 예상해보고,

2. 어디에서 선언된 “b”가 몇번째 라인에서 호출한 console.log에 찍혔는지, 왜 그런지 설명해보세요.

3. 주석을 풀어보고 오류가 난다면 왜 오류가 나는 지 설명하고 오류를 수정해보세요.

let b = 1;

function hi () {

	const a = 1;

	let b = 100;

	b++;

	console.log(a,b);

}

//console.log(a);

console.log(b);

hi();

console.log(b);

<답변>

1. 콘솔에 찍힐 b 값을 예상해보고,

2. 어디에서 선언된 “b”가 몇번째 라인에서 호출한 console.log에 찍혔는지, 왜 그런지 설명해보세요.

  • 첫번째 console.log(b)의 값은 1로 예상한다
    왜냐하면 전역 변수로 지정되어있는 첫째줄 let b = 1 때문이다.
    function hi()안의 let b = 100은 함수 내에 지역 변수로 설정되어있기 때문에 함수 밖에는 영향을 끼치지 못한다.
  • 두번째 console.log(b)의 값 또한 1로 예상한다.
    이유는 첫뻔째와 같다.

3. 주석을 풀어보고 오류가 난다면 왜 오류가 나는 지 설명하고 오류를 수정해보세요.

let b = 1;

function hi() {
  const a = 1;

  let b = 100;

  b++;

  console.log(a, b);
}

console.log(a);

console.log(b);

hi();

console.log(b);

//ReferenceError: a is not defined
  • console.log(a)의 주석을 풀었더니 ReferenceError: a is not defined가 출력됐다.

  • a가 선언된 지점은 hi()함수 내에 지역변수로 설정이 되어있는데, global context에서 a를 호출하였고, 여기서 const변수의 호이스팅이 일어나게된다.

  • const변수의 호이스팅은 선언 && 초기화 && 할당이 동시에 이루어져야 하는데, 여기서는 선언만 되어있고 초기화 및 값이 할당되어있지 않기 때문에 Reference Error가 출력되는 것이다.

let b = 1;

function hi() {
  const a = 1;

  let b = 100;

  b++;

  console.log(a, b);
  console.log(a);		// 전역 변수 a 호출
}

console.log(b);

hi();

console.log(b);

이렇게 a를 호출하는 부분을 hi()안에 넣어주면 된다 😃

profile
헬스 좋아하시나요

0개의 댓글