English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JavaScript 기본 교육

JavaScript 객체

JavaScript 함수

JS HTML DOM

JS 브라우저 BOM

AJAX 기본 교육

JavaScript 참조 설명서

JavaScript 提升(Hoisting)

JavaScript에서는 어디에 정의되었든지, 모든 변수와 함수 선언은 현재 스코프의 위쪽으로 이동하거나 提升됩니다. 이는 JavaScript 인터프리터의 기본 동작으로,hoisting(提升)

함수提升(Hoisting)

함수 선언으로 정의된 함수는 자동으로 提升됩니다。

이는 정의하기 전에 호출할 수 있다는 의미입니다。

// 선언 전에 함수 호출
greet();
function greet() {
  document.getElementById("output").innerHTML = "Hello World";
}
테스트를 보세요‹/›

그러니까 보신 것처럼, 정의하기 전에 이미 호출했습니다greet()함수는 코드가 유효하지만, 이는 함수 선언이 배경에서 자동으로 위쪽으로 이동된 것입니다。

提升는 JavaScript가 선언을 위쪽으로 이동시키는 기본 동작입니다。

JavaScript는 선언만 提升합니다

JavaScript는 선언만 提升하지만 초기화는 하지 않습니다. 변수를 사용한 후에 선언하고 초기화 했을 경우, 그 값은 불확실합니다。

document.write(num);  // undefined 
var num;
num = 50;
테스트를 보세요‹/›

변수를 사용한 후에 선언했지만 이전에 초기화 했을 경우, 그 값이 반환됩니다:

num = 50;
document.write(num);  // 50
var num;
테스트를 보세요‹/›

사용하여let또는const미선언 변수와 상수

미提升 JavaScript 초기화

JavaScript는 선언만 끌어올립니다. 초기화는 끌어올리지 않습니다.

다음 두 예제는 다른 결과를 생성합니다:

예제1:
var x = 1;   // x 초기화
var y = 2;   // y 초기화
document.write(x + " " + y); // 1 2
테스트를 보세요‹/›
예제2:
var x = 1;   // x 초기화
document.write(x + " " + y); // 1 undefined
var y = 2;   // y 초기화
테스트를 보세요‹/›

에서예제2에서의존성(=)이 아닌 선언(var y)만을 끌어올립니다. 2위로 끌어올림.

提升로 인해 y는 사용하기 전에 이미 선언되었습니다. 그러나 초기화는提升되지 않았기 때문에 y의 값은 undefined입니다.

위의 예제는 다음과 같이 은밀히 이해됩니다:

var x; // x 선언
var y; // y 선언
// 提升 종료.
x = 1; // x 초기화
document.write(x + " " + y);  // 1 undefined
y = 2; // y 초기화
테스트를 보세요‹/›

항상 상단에서 변수를 선언하십시오

提升(Hoisting)은 JavaScript의 알 수 없거나 무시된 행위입니다.

的提升(Hoisting)을 모르시면, 프로그램에 오류가 있을 수 있습니다.

오류를 피하기 위해 항상 모든 변수를 작은 범위에서 선언하십시오.

주의:변수가 선언되지 않았다면, strict 모드에서 JavaScript는 변수 사용을 허용하지 않습니다.

다음 장에서 "use strict"에 대해 더 알아보세요.