<목차>
1. 호이스팅의 개념
1.1 평과와 실행단계
2. 콜백함수
2.2 함수의 참조
1. 호이스팅의 개념
호이스팅은 자바스크립트의 고유 특징으로 식별자를 선언 하는 과정에서 발생하는 현상입니다.
선언문이 전체 소스코드의 중간에 있더라도 어디에 있든 상관없이, 선두로 끌어 올려진 것처럼 동작 하는 것 을 호이스팅 이라고 합니다.
1.1 평가와 실행 단계
호이스팅을 이해하기 위해선 평가와 실행단계의 개념을 알아야 합니다. 자바스크립트는 위에서 아래로 문서를 평가하는데 이 과정중에 실행단계와 평가단계 2단계로 나뉘어서 평가됩니다.
평가 단계
평가단계는 js 안에 변수의 선언(할당 X)된 부분과 함수 를 먼저 평가합니다. 이때 선언이된 변수들과 함수가 최상단으로 끌어올려지는 것 처럼 보이는데 이를 호이스팅 이라고 합니다.
log(a) 가 선언된 변수보다 위에 있어서 오류가 나야된다 라고 생각 되지만. undefined 값이 나옵니다. 그 이유는 평가단계시 선언된 변수를 먼저 파악(변수값은 파악하지 못함)하고 undefined 값을 먼저 주고(초기화 라고 명함) 실행 단계시 이 할당된 값을 띄우게 됩니다. 이 떄문에 변수 선언보다 그 변수의 재할당 ,참조코드가 앞서 상위에 있더라도 위치에 상관없이 어디서든지 변수를 참조 할 수 있습니다. (호이스팅)
실행단계
실행단계 시 파악이된 변수에 변수값을 읽어냅니다.
해당 변수를 실행시 평가단계에서 뜨던 undefined (초기화) 값을 log 하고 평가단계시 변수의 값 까지 읽어내기 떄문에 1이라는 값이 할당 되었다.
해당 코드에 a=2; 라는 값을 재할당 해보면 평가단계시 undefined 라는 값에 실행단계에서 a=2 라는 값을 재할당 하는 것을 알 수 있습니다. 그러나 이런 재선언 전에 참조,재할당을 먼저 하는 코드활용시 혼동을 야기할수 있기에
ES6 문법인 let 이나 const 도 초기화가 되긴 하지만 undefined 값으로 초기화 하는게 아니라 평가단계에서 부터 에러로 값을 주기에 실행이 되지않게 만들었습니다.
2. 콜백함수
콜백함수 즉 함수를 콜백 한다 라는 뜻으로 인자값을 통해 함수를 다른 함수로 넘겨주어서 함수가 콜백을 받았다 라고 해서 콜백 함수라고 합니다.
해당 함수로 설명시 hello 라는 함수와 print 라는 함수 2개가 있는데 그 밑에 result 라는 변수에 hello(print); 함수 안에 함수
즉 콜백함수를 선언함.
코드를 풀어서 보면 먼저 선언된 hello 함수로 먼저 갑니다. js라는 변수를 만들고 result 라는 변수에 print(js) 여기서 js= "javascript" 라는 문자를 인자값으로 가지고 print함수로 호출되어 들어갑니다. pitnt(name) 함수는 (name)라는 매게변수를 가지고 있지만 js라는 인자값을 가지고 호출 됬음으로 name = js = "jsvascript" 로 들어갑니다. print 함수의 리턴값이 "안녕하세요" + "javascript" 값을 가지고 result 값에 담기게 됩니다. result = hello(print)이고 result를 출력하면
"안녕하세요! javascript" 가 출력되게 됩니다. 이와같이 함수를 인자값으로 다른 함수에 던지는 것을 콜백 함수 라고합니다.
2.2 함수의 참조
함수 참조는 함수 자체를 참조한다. 라는 뜻으로 이것은 함수를 호출하지 않고 함수의 이름을 변수에 할당하거나 다른함수에 전달할 수 있습니다.
해당 sayHello라는 함수가 있고 log로 문자열인 "Hello"를 나타내려고 합니다. 여기서 변수 const helloFunction = sayHello 라는 함수의 할당을 하고 helloFunction() 를 호출했는데도 Hello 값이 출력됬습니다. 여기서 함수를 다시 변수에 담아서 참조한 것을 함수의 참조 라고합니다.