>  기사  >  웹 프론트엔드  >  js에서 변수 승격이란 무엇입니까? 왜 변수 승격이 있나요?

js에서 변수 승격이란 무엇입니까? 왜 변수 승격이 있나요?

青灯夜游
青灯夜游앞으로
2021-08-16 09:51:257538검색

JavaScript에서 변수 호이스팅이란 무엇인가요? 이 기사에서는 js의 변수 승격을 안내하고 변수 승격이 있는 이유를 소개합니다.

js에서 변수 승격이란 무엇입니까? 왜 변수 승격이 있나요?

js 변수 승격

JavaScript는 단일 스레드 언어이므로 순서대로 실행해야 합니다. 그러나 한 줄씩 분석하고 실행하는 것이 아니라, 컴파일 단계를 먼저 수행한 후 실행 단계를 수행합니다. 컴파일 단계에서 코드가 실제로 실행되기 몇 밀리초 전에 모든 변수 및 함수 선언이 감지되어 Lexical Environment라는 JavaScript 데이터 구조 내의 메모리에 추가됩니다. 따라서 이러한 변수와 함수는 실제로 선언되기 전에 사용할 수 있습니다.

간단한 예부터 시작해 보겠습니다.

 a = 2;
 var a;
 console.log(a);

위 코드는 무엇을 출력할까요? 이 코드를 위에서 아래로 실행하면 반드시 undefound가 출력됩니다. 하지만 JavaScript는 하향식 실행 언어가 아닙니다. 이 코드의 출력은 2입니다. 예상치 못한 결과인가요? 그렇다면 왜 이런 일이 일어나는 걸까요? 핵심은 -변수 프로모션에 있습니다. 현재 범위에 있는 모든 변수의 선언을 프로그램의 맨 위로 올리게 됩니다. 따라서 위 코드는 다음 코드와 동일합니다.

 var a;
 a = 2;
 console.log(a);

그럼 또 다른 예를 살펴보겠습니다.

 console.log(a);
 var a = 2;

이 코드는 무엇을 출력할까요? 출력 2? 실제로 이 코드는 정의되지 않은 결과를 출력합니다. 왜 이런가요? 방금 말했듯이 JavaScript는 변수 선언을 맨 위로 승격하지만 할당 문은 승격되지 않습니다. js의 경우 var a = 2는 two-step analyze:

var a;
a = 2;

으로 나뉘며 js는 승격만 됩니다. 승격된 var a이므로 지금의 명령문은 다음과 같습니다.

 var a;
 console.log(a);
 a = 2;

그럼 변수 승격이 있는 이유는 무엇입니까?

변동승격 현상은 왜 발생하나요? 왜냐하면 js도 다른 언어와 마찬가지로 컴파일과 실행 단계를 거쳐야 하기 때문입니다. js는 컴파일 단계에서는 모든 변수 선언을 모아서 미리 변수를 선언하게 되며, 다른 문장들은 순서가 바뀌지 않습니다. 따라서 컴파일 단계에서는 첫 번째 단계가 실행되고, 두 번째 부분이 실행됩니다. 실행 단계에서 명령문이 실행될 때만.

변수 선언

JS 변수 선언은 크게 var 선언, let 및 const 선언, 함수 선언의 세 가지 유형으로 나눌 수 있습니다. 함수 선언이 다른 선언과 함께 나타나면 일부 충돌이 발생할 수 있습니다. 아래를 살펴보겠습니다.

 fn();
 function fn () {
     console.log('fn');
 }
 var fn = 2;

무엇이 출력될 것 같나요? 이렇게 쓰면 오류가 날까요? 실제로 출력 결과는 fn입니다. 이것은 함수 선언이 다른 선언과 함께 나타날 때, 누가 우선권을 갖는가라는 질문을 설명합니다. 대답은 함수 선언이 무엇보다 중요하다는 것입니다. 결국 함수는 js의 귀족입니다.

함수 선언이 너무 많으면 어떻게 해야 하나요?

 fn();
 function fn () {
     console.log('1');
 }
 function fn () {
     console.log('2');
 }

위 코드의 출력 결과는 2입니다. 에 여러 함수 선언이 있는 경우 마지막 함수 선언이 이전 을 대체하기 때문입니다.

마지막 예가 하나 있습니다.

 fn();
 var fn = function () {
 console.log('fn');
 }

위의 내용을 이해하신 후, 이것이 매우 간단합니까? 이는 두 번째 예와 동일합니다. var fn = function() {}의 형식을 함수 표현식이라고 합니다. 실제로는 두 부분으로 나뉩니다.

var fn;
fn = function() {};

예제 2를 참조하면 이에 대한 결과가 오류여야 함을 알 수 있습니다(fn이 선언되었지만 할당되지 않았으므로 fn이 정의되지 않았기 때문입니다).

요약

자, 요약해보겠습니다.

  • js는 실행을 위해 변수 선언을 js의 최상위로 끌어올립니다. var a = 2와 같은 명령문의 경우 분할되고 var a 단계가 승격됩니다.

  • 변수 승격의 핵심은 실제로 js 엔진이 컴파일 시 모든 변수를 선언하므로 실행 시 모든 변수가 선언된다는 것입니다.

  • 같은 이름을 가진 변수가 여러 개 있으면 함수 선언이 다른 선언을 덮어씁니다. 함수 선언이 여러 개 있는 경우 마지막 함수 선언이 이전 선언을 모두 재정의합니다.

더 많은 프로그래밍 관련 지식을 보려면 프로그래밍 소개를 방문하세요! !

위 내용은 js에서 변수 승격이란 무엇입니까? 왜 변수 승격이 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제