Skip to content

[토의] 호이스팅에 대하여. #4

@Markers

Description

@Markers

질문

1. 호이스팅이 무엇인가?

2. 왜 알아야 하는가?

3. 호이스팅으로 인한 장점 혹은 단점이 있는가? [이 부분에 대해서 생각해봅시다]

상세내용

변수 선언문이 위치와 상관없이 유효 스코프의 최상단으로 올려진 것처럼 동작하는 자바스크립트의 특성.

var 변수 선언과 함수 선언문에서만 호이스팅이 발생.

동작 순서

  1. 자바스크립트 엔진이 런타임 이전에 소스코드를 평가. 호이스팅이 발생하는 변수 선언문을 유효 스코프 최상단으로 끌어올림.
  2. 그 후에 소스코드를 한라인씩 위에서 아래로 순서대로 실행.

예제.

// 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 이후부터는 변수 선언시 constlet 키워드가 추가되어 사용되어 호이스팅이 발생하지 않았지만, 그 이전의 소스들은 var를 이용하여 사용하였기에 사용자의 의도와 다르게 소스가 동작할 수 있음. 이를 인지하고 있어야 함.

호이스팅의 장단점?

예전에 호이스팅의 장점? 이라고 설명을 한 글을 본거 같은데 기억 나질 않아 의문이 드네요. 일단은 자바스크립트의 예전 문법의 부가효과이기 때문에 인지를 해야된다고 책에서는 언급하고 있습니다.
단점으로는 예상 밖의 결과를 초래할 수 있다는 점과 이런식의 호이스팅을 일으키는 선언문이 많을 경우, 소스를 실행하기 전에 처리해야 할 부분이 많아져 느려지는 부분이 있다고 알고 있습니다.
혹 다른 분들이 알고 있는 부분이 있으면 알려주세요.

참고

모던 자바스크립트 Deep Dive 책 4장 변수, 43p

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions