// 함수 선언문
function foo(){}
// 함수 표현식
var bar = function(){};
// 객체의 property로 함수가 할당
const barx = {
x: function() {}
}
new foo(); // foo 함수 객체가 내부 메소드, // [[constructor]]를 가지고 있다.
new bar(); // [[constructor]]를 가지고 있다.
new barx.x(); // [[constructor]]를 가지고 있다.
const arrow = () => {};
//new arrow(); // error : arrow is not a constructor -> [[constructor]] 를 가지고 있지 않다.
const obj = {
x() {
}
// [[constructor]] 를 가지고 있지 않다.
}
new obj.x()
- 함수 안에 있는 선언들을 모두 끌어올려서 해당 함수 유효 범위(Scope)의 최상단에 선언하는 것
- 자바 스크립트의 특징
- var 변수 선언과 함수 선언문에만 호이스팅이 일어난다. (function scope)
- 자바 스크립트는 식별자를 먼저 확인한다.
- 변수 선언을 runtime 이전에 수행하고, 함수 위로 끌어올려준다.
- 자바 스크립트에 나오는 모든 식별자들은 호이스팅된다.
function getX() {
console.log(x); // undefined
var x = 100; // var x 호이스트
console.log(x); // 100
}
getX();
foo( );
var foo = function( ) {
console.log(‘hello’);
};
// type error