함수 외부에 있는 값은 함수 내부의 매개 변수에 복사된다. 이는 변수 사이에서 값을 복사하는 것과 같다.
값이 객체인 경우, 값 복사의 경우 참조로 이루어지는 것과 달리, 매개 변수에서는 원시값 복사와 같은 형태로 복사된다. 그러나 접근할 때는 참조형태로 힙(전역)에 존재하는 객체에 접근한다. (이 부분 나도 아직 명확히 이해가 잘 안됨;)
매개변수는 함수 내에서의 지역변수라고 이해하면 편하다.
function = setName(obj) { // 매개변수 obj에 person의 값(객체)를 복사한다. <--person의 객체
obj.name = "gh" // obj의 name 속성의 값은 "gh"로 세팅된다. <--- person의 객체
obj = new Object() // obj에 새로운 값(객체)를 부여 한다. <--- 함수 내 지역변수(매개변수)에 새로운 객체 (값)을 부여했다. 이 순간 함수가 호출될 때, obj 변수에 복사되었던 person의 객체는 삭제되고, 새로운 객체가 부여되었다. 여기서부터는 person의 객체가 아닌 새로운 객체이다.
obj.name = "js" // 바로 윗줄에서 생성된 객체 name속성의 값은 "js"로 세팅된다.
}
let person = new Object()
setName(person)
console.log(person.name) //gh
'프론트엔드 개발자를 위한 자바스크립트 프로그래밍 공부 > 4장 변수와 스코프, 메모리' 카테고리의 다른 글
scope chain (1) | 2019.01.15 |
---|---|
타입 판별 (0) | 2019.01.15 |
값 복사 (0) | 2019.01.14 |
힙(heap) (0) | 2019.01.14 |
변수, 원시값, 참조값(객체) (0) | 2019.01.11 |