불변성이란?

문자열과 불변성

var str = 'string';

// 인덱스로 접근
console.log(str[0]); // s

// 객체처럼 동작
console.log(str.length); // 6
console.log(str.toUpperCase()); // STRING

// 그러나 값은 변경할 수 없다. (에러는 발생하지 않음)
str[1] = 'p'; 
console.log(str); // string

// 재할당은 가능하다.
str = 'spring';
console.log(str); // spring

값에 의한 전달 vs 참조에 의한 전달

값에 의한 전달 (원시 값)

var score = 80;
var copy = score;

score = 100;

console.log(score); // 100
console.log(copy);  // 80
var score = 90;
var copy = score;

console.log(score === copy); // true

score = 100;

console.log(score === copy); // false

참조에 의한 전달 (객체)

var person = {
	name: 'leeeunji'
};
var copy = person;

copy.name = 'eunjios';
person.country = 'korea';

console.log(person); // {name: 'eunjios', country: 'korea'}
console.log(copy);   // {name: 'eunjios', country: 'korea'}
var person = {
	name: 'leeeunji'
};
var copy = person;

console.log(person === copy); // true

var newPerson = {
	name: 'leeeunji'
};

console.log(person === newPerson); // false