연습문제 #1. 보기 중 정답인 것을 고르시오
a = 2;
var a;
console.log(a);
① 오류가 발생한다.
② 정상적으로 실행되고 undefined가 출력된다.
③ 정상적으로 실행되고 2가 출력된다.
연습문제 #1 풀이
var a = 2;를 하게 되면 JavaScript는 아래와 같이 동작한다.
- var a
- 인터프리터가 변수를 선언 - a = 2
- a라는 변수를 찾는다.
- 없다 → 전역 변수를 생성하고 값을 대입
- 있다 → 변수에 값을 대입
연습문제 #2. 위치별 a의 값을 적으시오.
var a = 'g';
function fn(){
console.log(a); // ①
var a = 'l';
console.log(a); // ②
}
fn();
① undefined
② l
연습문제 #2 풀이
fn 함수안의 var a = 'l'의 선언 부분이 함수 내부의 최상위로 호이스팅 되기 때문에 ①의 값은 undefined가 출력이 된다.
그 뒤, 변수a에 l이라는 값을 넣은 뒤, a를 출력을 하게 되는데 이때의 a(②)는 l을 출력하게 된다.
각 위치별 console에 찍힐 값은?
function abc() {
var a = ‘bbb’;
console.log(a) // ---- ①
function c() {
console.log(a); // ---- ②
(function() {
console.log(a); // ---- ③
a = ‘ccc’;
})();
var a;
console.log(a) // ---- ④
}
function d() {
console.log(a); // ---- ⑤
}
c();
a = ‘ddd’;
d();
};
abc();
문제의 요점
Hoisting의 동작 원리
문제의 정답
① bbb
② undefined
③ undefined
④ ccc
⑤ ddd
문제 풀이
문제의 해석과정
- abc()를 실행한다.
- a를 선언한다.
- a에 'bbb'라는 값을 대입한다.
- a를 출력한다. (① bbb)
- c()를 선언한다.
- d()를 선언한다.
- c()를 실행한다.
- a를 출력한다. (② undefined)
c()내의 a라는 함수가 있기 때문에 c()내의 선언 부분만 끌어올려진 뒤, 출력된다. - 즉시 실행 함수를 선언한다.
- a를 출력한다. (③ undefined)
선언 부분은 존재하지 않고 할당 부분만 존재한다. a에는 이전의 a값이 들어있다. - a에 'ccc'를 대입한다.
- a를 출력한다. (④ ccc)
- a에 'ddd'를 대입한다.
- d()를 실행을 한다.
- a를 출력한다. (⑤ ddd)
'자바스크립트' 카테고리의 다른 글
async & await (0) | 2023.11.17 |
---|---|
프라미스 (promise) (0) | 2023.11.17 |
문풀1 ^^ (0) | 2023.11.16 |
AJAX (Asynchronous Javascript And XML) (0) | 2023.11.16 |
JSON (0) | 2023.11.16 |