자바스크립트 호이스팅
console.log(i); // undefined
var i = 0;
실행시 위의 코드는 정의되지 않음을 답으로 제공합니다.
이제 스니펫을 다시 관찰하십시오. i 변수는 초기화되기 전에 호출됩니다. 정상적인 경우에는 참조 오류가 발생해야 합니다(초기화 전에 변수를 호출할 수 없음).
그러나 JavaScript에는 없습니다. 왜 그래야만하지? 위의 스니펫과 혼동되는 경우 이 블로그가 적합합니다.
실제로 무슨 일이 일어나고 있습니까?
위의 코드에서 var 키워드는 코드 위에 푸시되고 JavaScript에 의해 자동으로 초기화됩니다(값 0이 아닌 i 변수만 위에 푸시됨). 따라서 코드 실행 시 다음과 같이 됩니다.
var i; // automatically inserted by JS Engine at run time
console.log(i);
var i = 0;
i는 위에서 푸시되고 JS 엔진에 의해 초기화되었으므로 콘솔 라인에서 오류 대신 정의되지 않음이 표시됩니다.
JavaScript에서 코드를 실행할 때 JS 엔진은 변수 및 함수 선언을 코드의 맨 위로 이동합니다. JavaScript의 이 기능 또는 동작을 JavaScript에서는 호이스팅이라고 합니다.
let과 const는 어떻습니까?
위에 쓴대로 JS는 코드 상단에 있는 모든 변수와 함수를 옮기지만 var의 경우 초기화를 해줍니다.
이것은 let & const의 경우가 아닙니다.
let 키워드 기반 변수 선언으로 아래 코드를 고려하십시오.
console.log(i);
let i = 0;
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
따라서 let 및 const 키워드의 경우 JS 엔진은 변수 선언을 호이스트하지만 초기화하지는 않습니다. JS 엔진은 변수를 알고 있지만 선언되거나 초기화될 때까지 사용할 수 없습니다. 따라서 변수는 선언되고 참조 오류가 발생할 때까지 일시적인 데드 존에 들어갑니다.
함수 호이스팅
위에서 쓴 것처럼 함수는 JavaScript에서도 호이스팅됩니다.
아래 코드를 고려하십시오.
let x = 20,
y = 30;
let total = add(x, y);
console.log(total); // 50, because of hoisting
function add(a, b) {
return a + b;
}
위의 코드에서 정규 함수도 JS에서 호이스팅(스크립트의 맨 위로 이동)하므로 출력은 50이 됩니다.
함수 표현이라면?
아래 코드를 고려하십시오.
let x = 20,
y = 30;
let total = sum(x, y);
console.log(total); // Error
var sum = function (a, b) {
return a + b;
};
위의 코드에서 다음과 같은 결과를 얻습니다.
함수는 변수 sum(var 키워드로 선언됨)에 저장되므로 위에서 호이스팅되고 초기화되며(함수 표현식이 아닌 변수만 위에 푸시되고 값은 푸시되지 않음) sum의 값은 정의되지 않습니다. 따라서 sum은 정의되지 않았기 때문에 함수가 아닙니다.
실행 시 코드는 다음과 같습니다.
let x = 20,
y = 30;
var sum // Automatically inserted by JS engine
let total = sum(x, y);
console.log(total);
var sum = function (a, b) {
return a + b;
};
결론
Reference
이 문제에 관하여(자바스크립트 호이스팅), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kunalt96/javascript-hoisting-56o1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)