console.log

[모던 자바스크립트 Deep Dive] 13 - 15 장 Self Quiz 본문

개발공부/JavaScript

[모던 자바스크립트 Deep Dive] 13 - 15 장 Self Quiz

foresight 2023. 8. 21. 14:36

1. 다음 결과는 ?

var var1 = 1;

if(true) {
	var var2 = 2;
	
	if(true) {
		var var3 = 3;
	}
}

console.log(var1);  // 1
console.log(var2);  // 2
console.log(var3);  // 3

var var4 = 4;

function test() {
	var var4 = 5;
	let let5 = 5;
	console.log(var4);  // 4
	let let5 = 6;
	console.log(let5);  // 5
}

test();
console.log(var4);  // 6

 

정답
1. 1
2. 2
3. 3
4. 5    —→  우선적으로 inner function에서 찾는다.
5. SyntaxError  —→ let, const는 같은 스코프 내에서 중복 선언 불가능
6. 4

2. 다음 결과는 ?

var x = 1;

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

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

foo();  // 1
bar();  // 2

 

정답
1. 1
2. 1


🔸 자바스크립트는 렉시컬 스코프를 따른다

렉시컬 스코프는 함수 정의 위치에 따라 상위 스코프를 결정한다. 
이 경우에는  bar함수가 전역에서 정의된 함수이므로 전역 스코프에 따라 x = 1을 출력한다.

3. 다음 결과는 ?

var x = 1;

function foo() {
    console.log(x);  // 1
    var x = 2;
}

foo();
console.log(x);  // 2

 

정답
1. undefined   ——> 지역 변수가 우선적으로 선택되는데 이때 변수 호이스팅으로 undefined 초기화 된 상태
2. 1

4. 다음 결과는 ?

var Count = ( function() {
	var num = 0;

	return {
		increase() {
			return ++num;
		},
		decrease() {
			return --num;
		}
	};

})();

console.log(Count.num);  // 1
console.log(Count.increase());  // 2
console.log(Count.decrease());  // 3

 

정답
1. undefined   ——> 즉시 실행 함수의 지역 변수이므로 외부에서 사용 불가
2. 1
3. 0


🔸 모듈 패턴을 이용한 정보 은닉

5. 다음 중 옳지 않은 것을 모두 고르시오.

① let과 const는 재선언이 불가능하다
② var는 사용하지 않는 것이 좋다
③ let은 한정적으로 필요할 때만 사용하는 것이 좋다
④ let과 const는 변수 호이스팅이 발생하지 않는다
⑤ const에 할당한 모든 값은 변경 불가능하다

정답
④ : 변수 호이스팅이 발생되지만 참조가 불가능해서 호이스팅이 발생되지 않는 것처럼 보임
⑤ : 객체의 경우 프로퍼티를 변경해 변경 가능하다. (재할당이 불가능한 것… 불변을 의미하지는 않음)