You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ES6 이후부터는 변수 선언시 const 와 let키워드가 추가되어 사용되어 호이스팅이 발생하지 않았지만, 그 이전의 소스들은 var를 이용하여 사용하였기에 사용자의 의도와 다르게 소스가 동작할 수 있음. 이를 인지하고 있어야 함.
호이스팅의 장단점?
예전에 호이스팅의 장점? 이라고 설명을 한 글을 본거 같은데 기억 나질 않아 의문이 드네요. 일단은 자바스크립트의 예전 문법의 부가효과이기 때문에 인지를 해야된다고 책에서는 언급하고 있습니다.
단점으로는 예상 밖의 결과를 초래할 수 있다는 점과 이런식의 호이스팅을 일으키는 선언문이 많을 경우, 소스를 실행하기 전에 처리해야 할 부분이 많아져 느려지는 부분이 있다고 알고 있습니다.
혹 다른 분들이 알고 있는 부분이 있으면 알려주세요.
참고
모던 자바스크립트 Deep Dive 책 4장 변수, 43p
The text was updated successfully, but these errors were encountered:
1. 호이스팅은 무엇인가?
호이스팅은 변수의 선언이 코드 상단에 옮겨져서 실행되는 것처럼 작동하는 것을 말한다.
2. 왜 알아야 하는가?
호이스팅은 자바스크립트 동작방식이기 때문에 알고 있어야한다.
자바스크립트 엔진은 소스코드를 평가한 뒤, 실행한다.
소스코드 평가에서 선언된 변수를 찾아내 먼저 실행하기 때문에,
선언이 코드 상단에 옮겨져서 실행되는 것처럼 보인다.
const, let도 호이스팅이 이루어진다. 근데 왜 var랑 다르게 작동할까?
변수의 생성과정: 선언 - 초기화 - 할당
이유는 변수의 생성과정에 있다.
var는 런타임 이전인 소스코드 평가때, 선언과 초기화(undefined) 함께 이루어진다.
let, const는 소스코드 평가에 선언만 이루어지며, 런타임에 변수 선언문에서 초기화가 이루어진다.
그렇기에 let,const도 호이스팅이 이루어지지만, 참조오류때문에 호이스팅이 작동하지 않는 것처럼 보인다.
console.log(a);// ReferenceError: Cannot access 'a' before initialization leta=5;
에러메시지를 잘 보면, 초기화 전에 접근했기에 참조오류를 내고있다.
즉, 변수 a의 선언은 이전에 일어난 것을 알 수 있다.
*var, let, const 이외에도 function, class 등 모든 선언은 런타임 이전에 실행된다.
질문
1.
호이스팅
이 무엇인가?2. 왜 알아야 하는가?
3.
호이스팅
으로 인한 장점 혹은 단점이 있는가? [이 부분에 대해서 생각해봅시다]상세내용
var 변수 선언과 함수 선언문에서만 호이스팅이 발생.
동작 순서
유효 스코프
최상단으로 끌어올림.예제.
호이스팅으로 인하여 변경
출력 결과물
ES6 이후부터는 변수 선언시
const
와let
키워드
가 추가되어 사용되어 호이스팅이 발생하지 않았지만, 그 이전의 소스들은var
를 이용하여 사용하였기에 사용자의 의도와 다르게 소스가 동작할 수 있음. 이를 인지하고 있어야 함.호이스팅의 장단점?
예전에 호이스팅의 장점? 이라고 설명을 한 글을 본거 같은데 기억 나질 않아 의문이 드네요. 일단은 자바스크립트의 예전 문법의 부가효과이기 때문에 인지를 해야된다고 책에서는 언급하고 있습니다.
단점으로는 예상 밖의 결과를 초래할 수 있다는 점과 이런식의 호이스팅을 일으키는 선언문이 많을 경우, 소스를 실행하기 전에 처리해야 할 부분이 많아져 느려지는 부분이 있다고 알고 있습니다.
혹 다른 분들이 알고 있는 부분이 있으면 알려주세요.
참고
모던 자바스크립트 Deep Dive 책 4장 변수, 43p
The text was updated successfully, but these errors were encountered: