[TIL] Javascript - Variable(변수)

이나현·2021년 7월 7일
0

JavaScript

목록 보기
3/13
post-thumbnail

Variable(변수)

변수는 상징적인 이름이다. 예를 들어, "나의 직업은 개발자이다."라고 했을 때, '직업'이라는 큰 주머니가 변수가 될 수 있다.

 let job = "developer" //"developer"자리에 다른 직업들이 와도 된다!

"개발자"는 변수에 들어가는 값이다.
위에도 설명했듯이, "개발자" 외에도 다른 값들이 포함될 수 있다.

큰 주머니 안에 다양한 값들이 들어갈 수 있다고 이해했다.

변수의 선언

변수의 선언에는 3가지 방법이 있다. var/let/const가 있다. 이 중 'var'는 최근에 잘 안 쓰인다고 한다.

var. let. const는 5가지 차이점이 있다.

  1. 중복선언 가능 여부
  2. 재할당 가능 여부
  3. 변수 스코프 유효범위
  • 스포크란? 유효한 참조 범위
  1. 변수 호이스팅 방식
  • 호이스팅이란? 변수 선언문을 미리 실행해두기 때문에 선언된 변수도 앞의 코드에서 참조 가능한 것
  1. 전역객체 프로퍼티 여부

1. var

1) 중복선언 가능: 마지막 할당된 값이 변수에 저장된다.

var a = 10;
var a = 20; //가능 

2) 재할당: 변수 선언 및 초기화 후 다른 값 재할당 가능

var a = 10;
a = 20; //가능

3) 스코프(scope) : 함수 레벨 스코프(function-level scope)
var는 함수 내부에 선언된 변수만 지역변수로 한정하며, 나머지는 모두 전역변수로 간주한다.

function hello() {
	var a = 10; 
    console.log(a); 
}
hello(); //값: 10 
console.log(a); // 값: ReferenceError: a is not defined

4) 호이스팅: 변수 호이스팅 발생

console.log(a) //undefined
var a = 10;
console.log(a); //10

뒤에서 선언된 변수 a가 앞에서 참조되었음에도 에러를 발생시키지 않는다. 이것을 var로 선언된 변수의 호이스팅이다!

5) 전역객체 프로퍼티

var a = 10;
console.log(window.a) //10 
console.log(a); //10

브라우저 환경에서 위 코드 실행 시, var로 선언한 변수 a는 브라우저 전역객체인 window의 프로퍼티로 할당된다.

2. let

1) 중복선언: 불가능
선언한 변수를 다시 선언할 경우 에러 발생

let a = 10;
let a = 20; //불가능

2) 재할당: 가능

let a = 20;
a = 30; //가능

3) 블록 레벨 스코프(block-level scope)

if(true) {
	let a = 10; 
    console.log(a); //10 
}
console.log(a); //10 

함수 내부는 물론, if문이나 for문 등의 코드블럭에서 선언된 변수도 지역변수로 취급한다.

4) 호이스팅 : 다른 방식으로 작동한다.

console.log(a); //ReferenceError : a is not defined
let a = 10;

호이스팅이 발생하긴 하지만 값을 참조할 수 없어 호이스팅이 발생하지 않는 것처럼 보인다.

5) 전역객체 프로퍼티가 아니다.

3. const

1) 중복선언: 불가능
선언한 변수를 다시 선언할 경우 에러 발생

const a = 10;
const a = 20; //불가능

2) 재할당: 불가능 (let과의 차이점)

const a = 20;
a = 30; //가능

3) 블록 레벨 스코프(block-level scope)

if(true) {
	const a = 10; 
    console.log(a); //10 
}
console.log(a); //10 

함수 내부는 물론, if문이나 for문 등의 코드블럭에서 선언된 변수도 지역변수로 취급한다.

4) 호이스팅 : 다른 방식으로 작동한다.

console.log(a); //ReferenceError : a is not defined
const a = 10;

호이스팅이 발생하긴 하지만 값을 참조할 수 없어 호이스팅이 발생하지 않는 것처럼 보인다.

5) 전역객체 프로퍼티가 아니다.

profile
technology blog

0개의 댓글