js 변수 (es5)

dev.dave·2023년 7월 29일

Javascript

목록 보기
160/167

변수편>


변수
-어떤 방에 문자나 숫자 들 어떤 값들을 담아내는 공간


변수 이름 지을때,

캐멀케이스가 있고,
스네이크 케이스가 있다.

캐멀은 koreaSeoulHome 이렇게 중간 시작점에 대문자로

스네이크는 korea_seoul_home 중간에 언더바 넣는거


변수의 데이터 타입

String

Number

Boolean (True , False)

Null ( 변수값을 의도적으로 비워둔 상태 의도적으로 빈공간 만들때, 널은 초기화 값으로 주오 넣어둠 왜냐면 메모리 누수방지때문 뭐,,클롷져에 넣는다던가...)

Underfined (변수명만 있고, 어떠한 값도 넣지않은 상태 var a; )

Object 객체 {}

Array ["" , "" , ""]

Function
함수도 하나의 객체 형태이다.
함수는 일급객체이다.
즉,
일급객체는
변수에저장할수있어야되고ㅡ,
함수의 파라미터로 전달할수있어야되고,
함수의 반환값(리턴값)으로 사용할수 있어야되고,
자료구조에 저장될수 있어야한다.

JS에서
변수 타입은
변수값에 의해서 정의 된다.

자바스크립트는 변수의 데이터 타입이 변수값에 의해 결정되기 때문에
다른 언어와 달리 타입 선언이 필요없다.
자바 같은경우는 var a : String 이렇게 한다.


변수는

타입이 어떻게 정해지는지는 위에보면 ,
값이 그 변수의 타입을 정해준다고 하였다.

그러면

변수의 값에 따라 타입이 정해지는데,

변수는

원시타입이 있고
참조타입이 있다

보통 원시타입은 객체가아닌 타입이고

참조타입은 객체 타입이다.

원시타입 : 데이터의 값을 복사
참조타입 : 데이터의 값을 참조

참조는 객체가 있으면 객체안에 값이 들어있는게 아니고 그값은 따로 어딘가에 저장이된다.
그럼 그 어딘가 따로 저장이된곳이 진짜 값이 들어있는곳인데,
그럼
객체안에 값을 접근하려면 주소값을 가르키게된다. 거기로 가면 진짜 값이 있는거다.
즉, 주소값을 가르키는켜서 그 주소값에 들어있는 데이터에 접근하는 방식이다.
그리고 주소값을 가르키는 변수들은 여러개가 될수있는거다.
누구든 그 주소값을 가르키게되면,
거기에 접근할수있다는 뜻이고,
거기 접근해서 값을 수정하면,
그 주소값을 가르키고 있는 모든 변수들은 수정된값, 즉 변경된값을 여전히 가르키고 있는거다.
예)
var a = ["a1","a2","a3"];
var b = a;

b[0] = "x";

console.log(a); // ["x","a2","a3"]
console.log(b); //["x","a2","a3"]

이렇게 수정된 값이 출력된다.
왜냐면 같은 주소값을 가르키고있기때문이다.
이게 참조다.

그에반에

원시타입은
그냥 변수에 객체가 아닌 타입을 저장시키면, 그냥 거기에 저장이 되는거다.
복사해서 자기자리에 넣는방식이다.
예)

var a = 'a';
var b = 'b';
b = 'x';

console.log(a); // a
console.log(b); // x

이렇게 원시 타입은 그냥 자기값을 자기 공간에 저장하고있고,
대입을 해도 자기자리에 다른값을 복사해와서 덮어쓰는거기때문에
어짜피 자기자리에 뭘하는거다.
그러니 수정이 되도 그냥 자기 자리에 수정이 된 값이 출력이되는거다.
즉 , a 랑 b는 아무 상관이없다.


스코프>>>>>>>


변수는 스코프를 가지는데,

글로벌

로컬

이렇게 정해져있다.

즉, 글로벌(window) 변수냐
로컬 변수냐
이렇게 나뉘어진다.

예)

var g = '글로벌변수';

function b (){
var g = '로컬변수';
// g = '로컬변수'; // 이렇게 var 이 없으면 g는 윈도우로 설정되고 저위에 g변수에 값을 덮어씨움
console.log(g);
}
b();
console.log(g);

--

다른예)

자바스크립트에서
스코프는 기본적으로
함수단위 스코프 이다.

function a () {
var b = 0;

if(true){
 var c = 0;

for (var d = 0 ; d < 5 ; d++){
		console.log(d);  // 0 1 2 3 4      
	}	
	console.log(d);  // 5
}
console.log(c);  // 0
}

*for문 안쪽 로그는
어떻게되냐면
0 일때 아래문장실행
1 일때 아래문장실행
2 일때 아래문장실행
3 일때 아래문장실행
4 일때 아래문장실행
5 일때 아래문장실행 안함
이렇게 되서 결국 4까지 찍히는거고

for문 바깥 로그는 지금 d의 값 자체는 일단 5로 되있으니 5가 찍히는거다.
즉, 위에포문은 5라서 조건을 만족못했기때매, 반복문 중단! 이러고 중단, 끝난거다 그래서 아래문장을 실행안하니 아예 실행이 안된거고,

바깥 콘솔을 그냥 d변수 값을 가지고온거고

profile
🔥개인 메모 / 다른블로그 자료 참조 / 다른블로그 자료 퍼옴 (출처표기) /여기저기서 공부 했던 내용 개인메모 & 참고 / 개인 기록 용도 블로그 입니다.🔥

0개의 댓글