-
Notifications
You must be signed in to change notification settings - Fork 2
Closed
Labels
questionFurther information is requestedFurther information is requested
Description
질문
1. 호이스팅이 무엇인가?
2. 왜 알아야 하는가?
3. 호이스팅으로 인한 장점 혹은 단점이 있는가? [이 부분에 대해서 생각해봅시다]
상세내용
변수 선언문이 위치와 상관없이 유효 스코프의 최상단으로 올려진 것처럼 동작하는 자바스크립트의 특성.
var 변수 선언과 함수 선언문에서만 호이스팅이 발생.
동작 순서
- 자바스크립트 엔진이 런타임 이전에 소스코드를 평가. 호이스팅이 발생하는 변수 선언문을
유효 스코프최상단으로 끌어올림. - 그 후에 소스코드를 한라인씩 위에서 아래로 순서대로 실행.
예제.
// Test.js
// node로 실행
console.log(score) // undefined
score = 80 // 값의 할당
var score; // 변수 선언
console.log(score) // 80호이스팅으로 인하여 변경
// Test.js
// node로 실행
var score; // 변수 선언, 호이스팅으로 인하여 변수 선언문이 위로 옮겨짐
console.log(score) // undefined
score = 80 // 값의 할당
console.log(score) // 80출력 결과물
undefined. /// 에상대로라면 reference error 라던지 별도의 에러 출력이 되어야..?
80
ES6 이후부터는 변수 선언시 const 와 let 키워드가 추가되어 사용되어 호이스팅이 발생하지 않았지만, 그 이전의 소스들은 var를 이용하여 사용하였기에 사용자의 의도와 다르게 소스가 동작할 수 있음. 이를 인지하고 있어야 함.
호이스팅의 장단점?
예전에 호이스팅의 장점? 이라고 설명을 한 글을 본거 같은데 기억 나질 않아 의문이 드네요. 일단은 자바스크립트의 예전 문법의 부가효과이기 때문에 인지를 해야된다고 책에서는 언급하고 있습니다.
단점으로는 예상 밖의 결과를 초래할 수 있다는 점과 이런식의 호이스팅을 일으키는 선언문이 많을 경우, 소스를 실행하기 전에 처리해야 할 부분이 많아져 느려지는 부분이 있다고 알고 있습니다.
혹 다른 분들이 알고 있는 부분이 있으면 알려주세요.
참고
모던 자바스크립트 Deep Dive 책 4장 변수, 43p
live-small
Metadata
Metadata
Assignees
Labels
questionFurther information is requestedFurther information is requested