let first = [10, 20, 30, 40];
let second = first;
second[0] = 5;
-> first = [10, 20, 30, 40]
second = [10, 20, 30, 40]
-> first = [5, 20, 30, 40]
second = [5, 20, 30, 40]
-> second는 first가 가지고 있는 주소를 그대로 가지고 있다
주소를 공유하고 있기 때문에 first도 똑같이 변경된다
let x = 2;
let y = x;
y = 3;
x는?
=> x는 2이다.
-> 원시자료형을 할당하는 경우 그 값 자체를 변수에 할당한다.
그 값을 복사하여 변수에다가 저장한다고 생각하면 된다.
그래서 변수 x에 영향을 미치지 않는다.
let x = { foo: 3 };
let y = x;
y.foo = 2;
x.foo는?
=> 2이다.
-> 변수 x와 변수 y에 모두 같은 { foo: 3 } 이라는 객체의 주소를 바라보고 있는거다.
같은 주소를 바라보고있는 y.foo가 2로 변경이 되었으니 같은 곳을 바라보고있던 x.foo도 2가 되어야한다.
console.log('codestates' === 'codestates');
console.log(3.14 === 3.14);
console.log([1,2,3] === [1,2,3]);
console.log({ foo: 'bar' } === { foo: 'bar' });
=> true/ true/ false/ false
-> 참조자료형의 ===은 주소값이 같은지를 확인한다.
let x = { foo: 3 };
let y = x;
y = 2;
x.foo는?
=> 3이다.
-> 변수 y는 x의 주소값을 할당받았다.
y는 2를 그후에 할당받았다.
참조자료형 { foo: 3 }에는 영향을 미치지 않기 때문에 x.foo을 조회해도 그대로 3이 나온다.
x는 {foo:3} 이고 , y는 2이다.
let myArray = [2, 3, 4, 5];
let ourArray = myArray;
ourArray[2] = 25;
ourArray = undefined;
myArray는?
=> [2, 3, 25, 5]
-> ourArray와 myArray의 주소값은 같음으로 myArray= [2,3,25,5]이다.
ourArray에 원시자료형 undefined가 할당되었기때문에 myArray에 접근할수없다.
let player = { score: 3 };
function doStuff(obj) {
obj.score = 2;
}
doStuff(player);
player.score는?
=> 2이다
-> 함수가 호출되면 매개변수obj에 변수player의 값이 할당된다.
obj.score에 2를 할당하면, obj와 player는 같은 주소값을 가지고 있기 때문에 player.score도 2가 되게 된다.
let score = 80;
function doStuff(value) {
value = 90;
}
doStuff(score)
score의 값은?
=> 80이다
-> 매개변수 value에 score의 값 80이 전달되고
value =90 에서 value에 90이 할당된다.
다만 변수 score의 값 80은 원시자료형이라 값자체를 복사하여 전달하게 된다.
그래서 함수에서 어떤일이 발생했던가와 관련이 없이 score는 초기에 할당된 값 80이 그대로 유지된다.
'부트캠프교육중 > JavaScript' 카테고리의 다른 글
[JavaScript] 클로저 (0) | 2023.01.02 |
---|---|
[JavaScript] 스코프 (2) | 2023.01.02 |
[JavaScript] 원시자료형와 참조자료형 (0) | 2023.01.02 |
[JavaScript] for in 과 for of (0) | 2022.12.31 |
[JavaScript] 객체 (0) | 2022.12.31 |