JavaScript 변수

3jung·2021년 7월 16일
0

JavaScript

목록 보기
6/6

JavaScript 변수

var, let, const

var

  • var는 한번 선언된 변수를 다시 선언할 수 있다.
var fruit = '사과';
console.log(fruit);	// 사과

var fruit = '오렌지;
console.log(fruit);	// 오렌지
  • var는 선언하기 전에 사용 가능 (호이스팅)
console.log(say);	// undefined
var say = 'hi';
  • 위 코드는 아래와 같다.
var say;
console.log(say);	// undefined
var say = 'hi';
  • 호이스팅: 스코프 내부 어디서든 변수 선언은 최상위에 선언된 것 처럼 행동

Temporal Dead Zone

  • 일종의 사각지대로, 선언 전에 변수에 접근하는 것을 금지한다.
  • let과 const도 호이스팅이 되지만 TDZ의 영향을 받음
  • 코드를 예측가능하게 하고, 잠재적인 버그를 줄일 수 있음

let

  • 호이스팅되지만 TDZ의 영향으로 에러 발생
let height = 170;

function showHeight() {
  console.log(height);
  
  let height = 165;
}
// Uncaught ReferenceError: Cannot access 'age' before initialization

변수의 생성과정

  1. 선언
    -> 변수 객체에 등록하는 단계. 변수 객체는 스코프의 참조 대상이 됨
  2. 초기화
    -> 변수 객체에 선언 단계의 변수를 위한 메모리를 만드는 단계. undefined로 초기화됨
  3. 할당
    -> undefined로 초기화된 메모리의 다른 값을 할당하는 단계

var의 생성과정

  1. 선언 및 초기화 단계
  2. 할당 단계

let의 생성과정

  1. 선언 단계
  2. 초기화 단계
  3. 할당 단계

const의 생성과정

  1. 선언 + 초기화 + 할당
const weight;
weight = 67;
// Uncaught SyntaxError: Missing initializer in const declaration

스코프

var는 함수 스코프(function-scoped)

  • 함수가 생성될때 스코프 발생
const age = 25;

if(age>19) {
  var text = '성인';
}
console.log(text);	// '성인'
function squared(n1) {
  var result = n1*n1;
}
squared(5);
console.log(result);
// Uncaught ReferenceError: result is not defined

let, const는 블록 스코프( block-scoped)

  • 블록이 생성될 때 스코프 발생
  • 함수, if문, for문, while문, try/catch문 등
const age = 25;

if(age>19) {
  let text = '성인';
}
console.log(text);
// Uncaught ReferenceError: text is not defined

0개의 댓글