Study/JavaScript

[JavaScript] 변수

2022. 1. 12. 13:51

변수

var a = 1;

위와같이 변수는 저장된 값을 식별할 수 있는 이름이다.

위의 코드에서 a는 ‘변수 이름’이다. 변수 이름을 ‘식별자(identifier)’라고도 한다.

변수의 값을 저장하는 행위를 ‘할당(assignment)’이라고 하고,

그 값을 읽어오는 것을 ‘참조(reference)’라고 한다.

단, 주의 할 점은 식별자는 값이 아닌 메모리의 주소를 기억하고 있다.

변수 선언

변수를 사용하기 위해서는 반드시 선언이 필요하다.

변수는 var, let, const로 선언할 수 있다.

어떤 것으로 선언하느냐에 따라 변수의 유효범위가 달라진다.

var는 전역범위, 함수범위이며, let과 const는 블록범위이다.

  • var (재선언o, 재할당o)

업데이트하고 다시 선언 할 수 있다.

  • let (재선언x, 재할당o)

업데이트 할 수 있지만 다시 선언 할 수 없다.

  • const (재선언x, 재할당x)

업데이트하거나 다시 선언 할 수 없다.

let과 const는 var와 다르게 변수 재선언이 불가능하다.

var javascript;
// javascript라는 이름을 가진 변수를 선언한것이다.
// 메모리에 변수 이름을 등록하고 저장할 메모리 공간을 확보한다.
// 이때 undefined으로 할당되어 값이 초기화된다.

// 값의 할당은
javascript = 'very easy!';

//또는
var javascript = 'vary easy!';

변수 호이스팅

코드가 실행하기 전 변수, 함수선언이 해당 스코프의 최상단으로 끌어올려진 것 같은 현상을 말한다.

자바스크립트 엔진은 코드를 실행하기 전 실행 가능한 코드를 형상화하고 구분하는 과정을 거친다.

이 과정에서 모든 선언을 스코프에 등록한다. 그래서 선언문보다 참조/호출이 먼저 나와도 오류없이 동작한다.

console.log(javascript);

var javascript;

// 결과 : undefinde

반면 let과 const는 블록범위로 제한이 되어있다.

function test() {
	if(window) {
		let study = 'javascript';
	}
	
	console.log(study);
}

test();

위와 같은 오류가 발생한다. var와는 다르게 자신의 블록 외엔 접근을 못한다.

 

const도 역시 let과 접근범위는 같다. 하지만 변수 재할당이 불가능하다.

const study = 1;
study = 2;

위와 같은 오류가 난다.

이렇게 let은 데이터를 변경해야 할때 사용하면 되고, const는 데이터를 바꿀 필요가 없을 때 사용하면 된다.

 

변수 명명 규칙

  • 첫글자에는 숫자를 쓸 수 없다.
  • 예약어(http://www.w3bai.com/ko/js/js_reserved.html)는 사용할 수 없다.
  • 대소문자가 구분되며 길이 제한이 없다.
  • 특수문자는 _와 $만 쓸 수 있다.

변수명을 잘 작성하면 가독성과 유지보수에 유리하기 때문에 규칙을 정해 놓는것이 좋다.

 

변수 표기법

  • 카멜 표기법(Camel Case)

처음 단어의 첫글자는 소문자로, 그 다음 단어 첫글자는 대문자로 시작하는 표기법

낙타의 등같다고 해서 Camel이라는 이름이 붙여졌다.

var javascriptStudy = 'javascript study';

⇒ 상수가 아닌 변수, 함수 이름에 사용

 

  • 파스칼 표기법(Parscal Case)

카멜 케이스와 다르게 단어의 처음 단어의 첫글자를 대문자로 시작하고 그 다음 단어의 첫글자도도 대문자로 시작한다.

var JavascriptStudy = 'javascript study';

⇒ Class나 객체 정의시 사용

 

  • 스네이크 표기법

모든 단어가 소문자이고 단어와 단어 사이마다 언더바(_)가 들어간다.

언더바(_)가 뱀처럼 보인다 하여 스네이크라는 이름이 붙여졌다.

var javascript_study = 'javascript study';

⇒ database의 데이터를 정의할때 사용