본문 바로가기
Development/Frontend

[JavaScript] Variables

by Skills 2022. 2. 10.

썸네일

1. 변수(Variables)

자바스크립트의 변수란 단순히 저장 위치의 이름이다.

즉, 데이터(값)를 저장하기 위한 컨테이너라고 보면 된다!

 

# 변수 선언 규칙

- 이름은 문자(a~z 또는 A~Z), 밑줄(_) 또는 달러($) 기호로 시작해야 한다.

- 첫 글자 뒤에 숫자(0~9)를 사용할 수 있다. (ex : value1)

- JavaScript 변수는 대소문자를 구분한다. (ex : x와 X는 다른 변수이다.)

- 예약어(자바스크립트 키워드 ex. var, let 등)는 이름으로 사용할 수 없다.

 

2. 변수 선언 방법(var, let, const)

1) 중복 선언

# var : 중복 선언 가능

var a = 10;
var a = 20;

 

# let, const : 중복 선언 불가능

let(const) a = 10;
let(const) a = 20;		//SyntaxError : identifier ‘a’ has already been declared

 

2) 재할당

# var, let : 값의 재할당이 '가능'한 변수(변할 수 있는 수)

var(let) a = 10;
a = 20;
console.log(a);			//20

 

# const : 값의 재할당이 '불가능'한 상수(변할 수 없는 수)

const a = 111;
a = 222;		//TypeError : Assignment to constant variable

 

3) 스코프(Scope)

스코프란 변수가 유효한 참조 범위를 말한다.

예를 들어, 함수 내부에서 선언된 변수는 함수 내부에서만 참조가 가능하다.

이 경우 변수의 스코프는 함수 내부로 한정된다.

 

# var : 함수 레벨 스코프(function-level scope)

var는 함수 내부에 선언된 변수만 '지역변수'로 한정하며, 나머지는 모두 전역 변수로 간주한다.

하지만, 함수를 제외한 영역에서 var로 선언한 변수는 '전역변수'로 취급된다. 한마디로 if문, for문, while문, try/catch문 등의 코드 블럭{...} 내부에서 var로 선언된 변수를 전역 변수로 간주한다.

 

# let, const : 블록 레벨 스코프(block-level scope)

let, const는 함수 내부는 물론, if문이나 for문 등의 코드 블럭{...}에서 선언된 변수도 지역변수로 취급한다. 그래서 블럭 내부에서 let, const로 선언된 변수는 외부에서 참조할 수 없다.※ 블록은 중괄호{}로 둘러싸인 코드 영역을 말함.

 

4) 호이스팅

자바스크립트는 코드를 실행하기 전, 일종의 '코드 평가 과정'을 거치는데, 이때 '변수 선언문'을 미리 실행하기 때문에 뒤에서 선언된 변수도 앞의 코드에서 참조할 수 있게 된다. 이게 호이스팅!

 

# var : 변수 호이스팅이 발생한다.

console.log(a);		// undefined

var a = 10;

console.log(a);		// 10

뒤에서 선언된 변수 a가 앞에서 참조되었음에도 에러를 발생시키지 않는다.

 

var로 변수를 선언하는 경우!코드 실행 전에 자바스크립트 엔진이 ①미리 변수를 선언 ②undefined로 초기화!

 

# let, const : 변수 호이스팅이 발생하지만 var와 다른 방식으로 작동한다.

console.log(a);		// ReferenceError : Cannot access 'a' before initialization

let a = 10;

뒤에서 선언된 변수를 앞에서 참조하려 하니 에러가 발생한다. 마치 호이스팅이 발생하지 않는 것처럼 보인다. 이런 현상이 발생하는 이유는 let, const 호이스팅 과정이 var와 다르기 때문이다.

 

let/const로 변수를 선언하는 경우!

코드 실행 전 ①미리 변수를 선언 ②초기화는 코드 실행 과정에서 변수 선언문을 만났을 때!

 

3. 변수에 저장할 수 있는 데이터 종류

1) 숫자형(Number)

정수형 10진수 / 정수형 16진수 / 실수형(소수점)ex) 나이와 몸무게를 변수에 담기!

var age = 19, weight = 65.5;

 

2) 문자형(String)

글자(문자열)를 말한다.ex) 아이디를 변수에 담기!

var id = "hajin1234"

 

3) 논리형(Boolean)

참(true, 1)과 거짓(false, 0) 두 가지 값만 존재한다.ex) 로그인 유무를 변수에 담기!

var login = true;

 

4) undefined

변수에 undefined가 저장되어 있다면 일반적으로 변수를 만든 후 초기화하지 않은 상태를 의미한다.ex) 변수를 선언하고 변수에 값을 대입하지 않는 경우! [값이 없는 변수의 기본 값 = undefined]

var data;
alert("data = " + data);

 

5) null

null의 뜻은 "아무것도 참조하고 있지 않다"라는 의미가 담겨 있으며 주로 객체를 담을 변수를 초기화할 때 많이 사용한다.ex) null 값으로 데이터를 초기화하는 경우!

var data1 = 0;            // 숫자 변수 초기화
var data2 = "";           // 문자 변수 초기화
var data3 = false;        // 논리형 변수 초기화
var data4 = null;         // 객체 변수 초기화

 

4. 변수 값 저장 및 변경

1) 변수 값 저장

var a = 1;
var b = a;
console.log(b);		//1

a에 '1'이라는 데이터를 대입하고 b에 a값을 대입해 저장

 

2) 변수 값 변경

var a = 1;
a = 2;
console.log(a);		//2

a를 먼저 선언하면서 1로 초기화하고 그다음에 2로 초기화하면 결국 a의 최종 값은 2가 저장된다.

 

5. 지역 변수와 전역 변수

1) 지역 변수

지역 변수는 블록{} 또는 함수 내에서 선언된다. 예를 들어

function myfunc() {
	var a = 10;	//지역 변수
}

 

2) 전역 변수

전역 변수는 함수 밖에서 정의된 변수이다.

var data = 100;		//전역 변수
function myfunc() {
	document.write(data);
}

data();		//JavaScript 함수 호출

 

6. 매개 변수

함수에 전달되는 변수를 '매개변수(parameter)'라고 한다.함수의 매개변수 값으로는 함수, 객체, 배열로 전달할 수 있다.

 

ex1)

function myfunc(userName){
	alert("userName = " + userName);
}

var name = "sonhajin";
myfunc(name);	//myfunc(name)을 호출하면 myfunc("sonhajin")으로 변경된다.

 

ex2)

function myfunc(a, b) {
	return a * b
}

myfunc(5, 2)	//10

 

ex3)

function myfunc(from, text) {		//매개변수 from, text
	alert(from + ' : ' + text);
}

myfunc('Son', 'Hello!');		//Son : Hello!
myfunc('Kim', "What’s up?");		//Kim : What's up?
728x90

'Development > Frontend' 카테고리의 다른 글

[JavaScript] 호이스팅  (0) 2022.03.29
[JavaScript] 스코프  (0) 2022.03.29
[jQuery] attr()과 prop()의 차이  (0) 2022.03.29
[JavaScript] Function  (0) 2022.02.18
[HTML] HTML 태그  (0) 2021.03.04

댓글