You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
변수 선언시 초기 값을 주지 않으면 자동으로 undifined를 초기 값으로 하여 메모리를 할당한다.
따라서 var로 선언한 변수는 선언 전에 사용해도 에러가 나지 않는다.
버그 발생과 메모리 누수의 위험 등이있다.
2. let
블럭 레벨 스코프이다.(코드 블록 내부에서 선언한 변수는 지역 변수)
letname='bathingape'console.log(name)// bathingapeletname='javascript'console.log(name)// Uncaught SyntaxError: Identifier 'name' has already been declaredname='react'console.log(name)//react
변수에 재할당이 가능하다.
// 스코프의 선두에서 선언 단계가 실행된다.// 아직 변수가 초기화(메모리 공간 확보와 undefined로 초기화)되지 않았다.// 따라서 변수 선언문 이전에 변수를 참조할 수 없다.console.log(foo);// ReferenceError: foo is not definedletfoo;// 변수 선언문에서 초기화 단계가 실행된다.console.log(foo);// undefinedfoo=1;// 할당문에서 할당 단계가 실행된다.console.log(foo);// 1
이미 존재하는 변수와 같은 이름의 변수를 또 선언할 수 없으며, 선언 단계와 초기화 단계가 분리되어 진행된다.
변수 선언 시 초기 값을 주지 않아도 된다.
3. const
블럭 레벨 스코프이다.(코드 블록 내부에서 선언한 변수는 지역 변수)
constname='bathingape'console.log(name)// bathingapeconstname='javascript'console.log(name)// Uncaught SyntaxError: Identifier 'name' has already been declaredname='react'console.log(name)//Uncaught TypeError: Assignment to constant variable.
변수 재선언, 변수 재할당 모두 불가능하다.(단, 객체 안에 프로퍼티가 변경되는 것까지 막지는 못한다.)