JS 튜토리얼

제이에스 홈 JS 소개 JS 어디로 JS 출력 JS 문 JS 구문 JS 코멘트 JS 변수 제이에스렛 JS 상수 JS 연산자 JS 산술 JS 할당 JS 데이터 유형 JS 함수 JS 객체 JS 이벤트 JS 문자열 JS 문자열 메서드 JS 문자열 검색 JS 문자열 템플릿 JS 번호 JS 숫자 메서드 JS 배열 JS 배열 메서드 JS 배열 정렬 JS 배열 반복 JS 배열 상수 JS 날짜 JS 날짜 형식 JS 날짜 가져오기 메서드 JS 날짜 설정 방법 JS 수학 JS 랜덤 JS 부울 JS 비교 JS 조건 JS 스위치 JS 루프 In에 대한 JS 루프 의 JS 루프 JS 루프 동안 JS 브레이크 JS 이터러블 JS 세트 JS 맵 JS 유형 JS 유형 변환 JS 비트와이즈 JS 정규 표현식 JS 오류 JS 범위 JS 호이스팅 JS 엄격 모드 JS 이 키워드 JS 화살표 함수 JS 클래스 JS JSON JS 디버깅 JS 스타일 가이드 JS 모범 사례 JS 실수 JS 성능 JS 예약어

JS 버전

JS 버전 JS 2009(ES5) JS 2015(ES6) JS 2016 JS 2017 JS 2018 JS IE / 엣지 JS 연혁

JS 객체

객체 정의 개체 속성 개체 메서드 개체 표시 개체 접근자 객체 생성자 개체 프로토타입 객체 반복 가능 객체 세트 객체 맵 개체 참조

JS 함수

기능 정의 기능 매개변수 함수 호출 함수 호출 기능 적용 함수 클로저

JS 클래스

수업 소개 클래스 상속 클래스 정적

JS 비동기

JS 콜백 JS 비동기 JS 약속 JS 비동기/대기

JS HTML DOM

DOM 소개 DOM 메서드 DOM 문서 DOM 요소 DOM HTML DOM 양식 DOM CSS DOM 애니메이션 DOM 이벤트 DOM 이벤트 리스너 DOM 탐색 DOM 노드 DOM 컬렉션 DOM 노드 목록

JS 브라우저 BOM

JS 창 JS 화면 JS 위치 JS 연혁 JS 네비게이터 JS 팝업 경고 JS 타이밍 JS 쿠키

JS 웹 API

웹 API 소개 웹 양식 API 웹 기록 API 웹 스토리지 API 웹 작업자 API 웹 가져오기 API 웹 지리적 위치 API

JS 아약스

AJAX 소개 AJAX XMLHttp AJAX 요청 AJAX 응답 AJAX XML 파일 AJAX PHP AJAX ASP AJAX 데이터베이스 AJAX 애플리케이션 AJAX 예제

JS JSON

JSON 소개 JSON 구문 JSON 대 XML JSON 데이터 유형 JSON 구문 분석 JSON 문자열화 JSON 객체 JSON 배열 JSON 서버 JSON PHP JSON HTML JSON JSONP

JS 대 jQuery

jQuery 선택기 제이쿼리 HTML 제이쿼리 CSS 제이쿼리 DOM

JS 그래픽

JS 그래픽 JS 캔버스 JS 플로틀리 JS 차트.js JS 구글 차트 JS D3.js

JS 예제

JS 예제 JS HTML DOM JS HTML 입력 JS HTML 객체 JS HTML 이벤트 JS 브라우저 JS 편집기 JS 연습 JS 퀴즈 JS 인증서

JS 참조

자바스크립트 객체 HTML DOM 객체


자바스크립트 호이스팅


호이스팅은 선언을 맨 위로 이동하는 JavaScript의 기본 동작입니다.


JavaScript 선언이 호이스트됩니다.

JavaScript에서는 변수를 사용한 후에 선언할 수 있습니다.

다시 말해; 변수는 선언되기 전에 사용할 수 있습니다.

예 1 은 예 2 와 동일한 결과를 제공합니다 .

실시예 1

x = 5; // Assign 5 to x

elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x;                     // Display x in the element

var x; // Declare x

실시예 2

var x; // Declare x
x = 5; // Assign 5 to x

elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x;                     // Display x in the element

이것을 이해하려면 "호이스팅"이라는 용어를 이해해야 합니다.

호이스팅은 모든 선언을 현재 범위의 맨 위로(현재 스크립트 또는 현재 함수의 맨 위로) 이동하는 JavaScript의 기본 동작입니다.


let 및 const 키워드

let및 로 정의된 변수 const는 블록의 맨 위로 호이스트되지만 초기화 되지는 않습니다 .

의미: 코드 블록은 변수를 인식하지만 선언될 때까지 사용할 수 없습니다.

let변수를 선언하기 전에 사용하면 ReferenceError.

변수는 블록 시작부터 선언될 때까지 "시간적 사각지대"에 있습니다.

예시

결과는 다음과 ReferenceError같습니다.
carName = "Volvo";
let carName;

변수를 선언하기 전에 사용하는 const것은 구문 오류이므로 코드가 실행되지 않습니다.

예시

이 코드는 실행되지 않습니다.

carName = "Volvo";
const carName;

JS Let/Const 의 let 및 const에 대해 자세히 알아보세요 .



JavaScript 초기화가 호이스팅되지 않음

JavaScript는 초기화가 아닌 선언만 호이스트합니다.

예 1 은 예 2 와 동일한 결과를 제공 하지 않습니다 .

실시예 1

var x = 5; // Initialize x
var y = 7; // Initialize y

elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x + " " + y;           // Display x and y

실시예 2

var x = 5; // Initialize x

elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x + " " + y;           // Display x and y

var y = 7; // Initialize y

마지막 예에서 y가 정의되지 않은 것이 말이 됩니까?

초기화(=7)가 아닌 선언(var y)만 맨 위로 올려지기 때문입니다.

호이스팅으로 인해 y가 사용되기 전에 선언되었지만 초기화가 호이스팅되지 않기 때문에 y의 값은 정의되지 않습니다.

예제 2는 다음과 같이 작성하는 것과 같습니다.

예시

var x = 5; // Initialize x
var y;     // Declare y

elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x + " " + y;           // Display x and y

y = 7;    // Assign 7 to y

맨 위에 변수를 선언하십시오!

호이스팅은 (많은 개발자에게) JavaScript의 알려지지 않았거나 간과된 동작입니다.

개발자가 호이스팅을 이해하지 못하면 프로그램에 버그(오류)가 포함될 수 있습니다.

버그를 방지하려면 항상 모든 범위의 시작 부분에 모든 변수를 선언하십시오.

이것이 JavaScript가 코드를 해석하는 방식이므로 항상 좋은 규칙입니다.

엄격 모드의 JavaScript는 변수가 선언되지 않은 경우 사용할 수 없습니다. 다음 장에서 "엄격한 사용"
을 공부 하십시오.