js_var 호이스팅

dev.dave·2023년 7월 29일

Javascript

목록 보기
156/167

호이스팅


변수는

처음 인터프리터시점에서는 어떻게 되냐면,\

var a = 1;

이라는 코드를 보면

처음에

var a

이런 형태로 처음 인터프린터가 되고,
(그래서 저기를 처음에 찍어보면 undefined 가 나오는거다. 즉, undefined 로 할당이 되어나오는것 보다는 그냥 저런형태로 진행이 된다는것이다.)

그래서

그다음 순서에서

var a = 1;

값이 할당이 되는거다.

그리고
값은 바로바로 할당이 된다
즉,

var a -> var a = 1;
var b -> var b = 2;

이거순서는

일단 var a 가 첫번째
var b 가 두번째
var a = 1; 값할당 세번째
var b = 2; 값할당 네번째


만약 복잡하게
함수도 껴있고 하면,,,

console.log(a);

var a = 1;

function c(x1){
console.log(a1);
var a1 = 1;
console.log(a1);
};

var b = 2;

function d(x2){};

c();

d();

console.log(a);

<순서>

첫번째 var a 선언

두번째 function c 선언 하고

세번째 x1 대입

네번째 var b 선언

다섯번째 function d 선언 하고

여섯번째 x2 대입

일곱번쨰 맨위의 콘솔로그 console.log(a); // undefined

여덟번째 var a = 1; 값대입

아홉번째 var b = 2; 값대입

열번째 c(); 함수호출

열한번째 var a1 선언

열두번째 console.log(a1); //undefined

열세번째 var a1 = 1; 값대입

열네번째 console.log(a1); // 1

열다섯번째 d(); 함수호출,,함수종료

열여섯번째 아래 콘솔로그 console.log(a); // 1

끝.....

참고로 콘솔로그는 변수 함수 선언이 끝나고 바로실행되는것같음...

예를들어

console.log(v); // 2
var v = 1; // 1 3
console.log(v); // 4

이런코드가있으면 실행순서는
저 숫자 순서대로된다.
이게 호이스팅이다.

뭐 끌어올려지는게 아니고,
사실은 저렇게 되는거다.


또 예를들어
이순서는

c(); // 5
a(); // 7 //여기서 바로 코드 중단! 타입 에러!!!! 왜냐면 지금 7번째에서는 a()라는 함수가 없거든!!!그래서
즉, a함수라는 이름의 함수가 없고 , a라는 변수는 있지만!!!a()이라는 건 함수호출인데 a변수를 해야지 왜 함수로 적었냐하고, 너 지금 타입잘못적은거야 라고 알려주는셈이다.

console.log(b);

var b = 'qqq'; // 1

function c (){ // 2 3
console.log('x'); // 6
}

var a = function(){ // 4
console.log('ddd');
};

a();
console.log(b);
a();
c();


다른예제>

a();// 5 //함수 호이스팅

b();// 10 // 여기서 바로 타입에러 코드중단...현재 a함수의 v1변수의 로그 언디파인드랑 ㅇㅇㅇ 만 콜솔로그에 찍힌상태이다 .
에러나는 이유는 b함수를 못찾아서임.

console.log(v); //

var v = 'ㅇㅇ'; // 1

function a(){ // 2 3
console.log(v1); // 7
var v1 = 'ㅇㅇㅇ'; // 6 8
console.log(v1); 9
};

console.log(v); //

b();//

var b = function(){ // 4
console.log(v2); //
var v2 = 'ㅇㅇㅇㅇ'; //
console.log(v2); //
};

console.log(v); //

b(); //

console.log(b); //

이런식으로 순서가 된다....



또 다른예제>

a();// 5

console.log(v); // 10

var v = 'ㅇㅇ'; // 1

function a(){ // 2 3
console.log(v1); // 7
var v1 = 'ㅇㅇㅇ'; // 6 8
console.log(v1); // 9
};

console.log(v); // 11

var b = function(){ // 4 12
console.log(v2); // 16 20
var v2 = 'ㅇㅇㅇㅇ'; // 15 17
console.log(v2); // 18 21
};

console.log(v); // 13

b(); // 14

console.log(b()); // 19

21번을 마지막으로 함수종료후 코드가 끝남

이런식으로 순서가 된다....

profile
🔥개인 메모 / 다른블로그 자료 참조 / 다른블로그 자료 퍼옴 (출처표기) /여기저기서 공부 했던 내용 개인메모 & 참고 / 개인 기록 용도 블로그 입니다.🔥

0개의 댓글