호이스팅

김우성·2021년 8월 18일
0

JavaScript

목록 보기
7/17
post-thumbnail

호이스팅



개념

'끌어올린다' 라는 개념이 들어가 있다

변수를 끌어올린다 함수를 끌어올린다

호이스팅은 코드상에는 눈에 보이지않는 개념이라 잘 기억하기




변수 호이스팅


console.log(a);

var a;

순서상 a라는 변수가 만들어지기 전에 콘솔로그로 a를 찾기 때문에 not defined 라는 에러가 발생해야 하지않나? 라는 의문이 들것이다.

결과는 에러 없이 밑에 console.log 적은거랑 같은 결과인 undefined로 나온다

이것을 변수호이스팅, 변수를 끌어올렸다 라고 한다.




전역변수를 만들었다면 이 변수는 어떤 위치든 변수에 (만들고나서 찾든 만들기전에 찾든) 다 접근할 수있음


변수호이스팅의 기억시 주의점

끌어올리는 기능 자체는 초기화에서는 발생되지않음

그래서 첫번째 콘솔로그에서는 undefined가 나타남

변수를 선언한 상태에서만 호이스팅이 발생하게되는것이고 초기화를 시킬때는 초기화 값 자체는 끌어올려지지않는다.


var a;

console.log(a);

a = "나는 A다"

console.log(a); 


변수 선언과 동시에 초기화를 시키면?

마찬가지로 어차피 단계는 선언과 초기화가 분리된 상태에서 진행되는것이기 떄문에 똑같은 결과

오로지 변수를 선언했을때만 끌어올려진다.


console.log(a);

var a = "나는 A다"

console.log(a);




함수 호이스팅

함수를 호출하고나서 함수를 만들 수 있다

이것도 호이스팅, 함수자체가 위쪽으로 끌어올려진 상태 그래서 함수호출하는데 전혀 문제가없음


func1();

function func1() {
	console.log("Func1 함수다.");
}


주의점

함수를 만들때 function 키워드 사용하고 그 옆에 함수명을 작성하는데 함수를 만들때 var키워드를 사용해서 변수를 만들고 이 변수의 값으로 함수를 전달 할수도 있음

이때 변수명이 함수명을 대체한다라고 생각하기

구조는 다르지만 동일하게 실행됨


var func2 = function () {
	console.log("Func2 함수다");
}

func2();


이때는 함수를 만들기전에 호출이 불가능, 함수가 아니라는 에러가 발생

에러가 발생하는 이유는 var func2 는 변수이기 때문에 값을 할당하기 전에 변수호이스팅으로 인해서 위로 끌어올려져서 undefined가 들어가있는 상태이기 때문


func2();

var func2 = function () {
	console.log("Func2 함수다");
}


함수 호이스팅은 변수안에 함수를 할당시키지않는 방식으로 (fucntion fun1() {} 방식) 만들었을 때 가능하다

변수를 만들어서 변수안에 함수를 할당하는 방식으로 함수를 만들었다면 함수 호이스팅은 발생하지않는다

그 이유는 변수 호이스팅의 규칙때문에

profile
매우 긍정적인 개발자

0개의 댓글

관련 채용 정보