«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
Recent Posts
Recent Comments
관리 메뉴

뉴히의 개발 로그

[TIL] 20230524 - 변수 선언과 데이터 할당/함수 선언문/함수 표현식 본문

개발일지/TIL

[TIL] 20230524 - 변수 선언과 데이터 할당/함수 선언문/함수 표현식

뉴히 2023. 5. 25. 00:54

변수영역 - 가변

: 새로운 데이터 주소로 계속 바뀌기 때문에 가변!

 

데이터영역 - 불변

: 데이터는 새로운 데이터를 생성하고 새로운 데이터를 변수에 할당하기 때문에 불변!

 

참조형 데이터 영역 - 가변

: 참조형 데이터 영역또한 데이터의 주소를 가져와 담고 있기 때문에 가변! 

 

 

[문제] 변수의 데이터는 가변이기 때문에 변경이 가능한데, 새로운 변수에 담으면 기존 변수 데이터도 영향을 받게됨

 

var user = {
	name: 'wonjang',
	gender: 'male',
};

// 이름을 변경하는 함수, 'changeName'을 정의
var changeName = function (user, newName) {
	var newUser = user; // * 복사한 후
	newUser.name = newName; // * 속성을 접근해서 변경하는 방법
	return newUser;
};

// 변경한 user정보를 user2 변수에 할당
// 가변이기 때문에 user1도 영향을 받게 됨
var user2 = changeName(user, 'twojang');

// 결국 아래 로직은 skip
if (user !== user2) {
	console.log('유저 정보가 변경되었습니다.');
}

console.log(user.name, user2.name); // twojang twojang
console.log(user === user2); // true

[해결] 새로운 객체로 리턴받아 새로운 주소를 할당해서 불면하게 만듬!

var user = {
	name: 'wonjang',
	gender: 'male',
};

// 이름을 변경하는 함수 정의
var changeName = function (user, newName) {
	return {
		name: newName,
		gender: user.gender,
	}; // * 새로운 객체를 생성해서 리턴! 새로운 주소를 할당하게 되기 때문에 불변 한다 (최선의 방법은 아님) 
};

// 변경한 user정보를 user2 변수에 할당
// 불변이기 때문에 user1은 영향이 없다
var user2 = changeName(user, 'twojang');

// 아래 로직이 수행
if (user !== user2) {
	console.log('유저 정보가 변경되었습니다.');
}

console.log(user.name, user2.name); // wonjang twojang
console.log(user === user2); // false

 

함수 선언문/함수 표현식

function a () { /* ... */ }
a(); // 실행 ok

// 함수 표현식. 정의한 function을 별도 변수에 할당하는 경우
// (1) 익명함수표현식 : 변수명 b가 곧 변수명(일반적 case에요)
var b = function () { /* ... */ }
b(); // 실행 ok

// (2) 기명 함수 표현식 : 변수명은 c, 함수명은 d
// d()는 c() 안에서 재귀적으로 호출될 때만 사용 가능하므로 사용성에 대한 의문
var c = function d () { /* ... */ } 
c(); // 실행 ok
d(); // 에러!

나는 주로 함수를 선언할때 

function a() { ... }  이렇게 선언했는데

let b = function() { .... }  이렇게 선언하는게 여럿이 많은 코드를 작업할때 함수명이 중복이 되더라도 덜 위험할 수 있다는걸 알았다

 

ex) 예를들어

10번째 줄에

fucntion sum (x, y) { return x + y; }

.

.

.

5000번 줄에

function sum (x, y) { return x + ' + ' + y + ' = ' + (x + y); }

이렇게 겹쳐도 각 그 아랫부분에만 적용되기때문에!

 

함수 표현식

 

오늘은 정말 머리가 뽀가지는줄 ^^

이론적으로 이해하려니까 어렵다.

그래도 코드를 하나하나 뜯어보면서 잘 이해하기로