일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 멋사
- 비동기
- SS
- 국비지원
- 웹개발
- likelion
- CSS
- 화살표함수
- 배열
- VAR
- 멋쟁이사자처럼
- 타입스크립트
- array
- react
- 코딩
- 네트워크
- 반복문
- 메소드체이닝
- for문
- Let
- 이벤트루프
- 리액트
- 자바스크립트
- 개발자
- 내일배움카드
- frontend
- 제주코딩베이스캠프
- JavaScript
- useState
- 프론트엔드
Archives
- Today
- Total
Ch.Covelope
Javascript <자바스크립트> call by value - reference. {콜바이벨류.콜바이레퍼런스} 본문
JavaScript
Javascript <자바스크립트> call by value - reference. {콜바이벨류.콜바이레퍼런스}
Chrysans 2021. 12. 22. 23:04728x90
반응형
Javascript <자바스크립트> call by value - reference.
평가 전략 (evaluation strategy)
call by value.
- 의미와 같이 값이 그대로 복사되는 것을 의미한다. 자바스크립트(JS)에서는 원시 데이터/원시 값의 경우 값의 복사 call by value가 발생하게 됩니다.
call by value.
var i = 1;
function somefunc(a) {
a = a + 1;
return a;
}
somefunc(i); // i의 값을 파라미터로 값만 복사해서 넘긴다. 복사된 값을 넘기기 때문에 원본은 바뀌지 않는다.
console.log(i) // 결과 1
i의 값을 함수의 인자로 파라미터로 넘길때 값을 복사해서 넘기기 때문에 원본의 값은 변하지 않는다.
call by reference.
- call by reference 는 데이터가 있는 주소(메모리)를 참조한다(값을 복사하는 게 아님). 객체나 배열에서 call by reference가 발생하다.
call by reference.
var i = { num: 1 }
function somefunc(a) {
a.num = a.num + 1;
return a;
}
somefunc(i); // i 의 객체를 파라미터로 넘겨서(a 자리에 {num: 1}) a의 num에 (=1) +1 을 해주고 a를 리턴한다.
// 복사값이 아닌 참조값이므로 결과는 {num: 2}가 출력된다.
배열이나 객체는 인자값을 파라미터로 넘길 때 복사 값이 아닌 참조를 하기 때문에 원본 값에 영향을 줄 수 있다.
call by sharing.
let 나 = {
name : '오국화'
}
function changeName(person){
person = {name : '안희원'}
console.log(person);
}
changeName(나); //name : '안희원'
console.log(나); //name : '오국화'
여기서 '나'에 객체가 할당되고 changName에 '나'를 인자로 person에 매개변수로 넘겨준다. 그럼 객체이기 때문에 call by reference 가 작동하여 원본 값이 바뀔 거 같지만 바뀌지 않는다. call by shraing에 의해서 동적 프로퍼티를 할당하게 되면 실제 객체의 프로퍼티 값이 바뀌지만 재할당이 되는 순간에는 다른 값을 가리킨다.
javascript는 call by value만 존재한다. 참조 타입을 넘기면 주소가 넘어가는 것이 아니라 주소 값을 복사한 복사본이 넘어간다.
이번 글을 포스팅하면 call by value와 reference는 예시를 보고 설명들을 보면서 100프로는 아니지만 이해하면서 작성하다가 sharing에서 엄청난 멘붕이 왔다... 계속 구글링 하고 찾아봐도 이해가 확실히 되는 글을 찾기가 너무 어려웠다 아직도 완전히 이해가 되지 않았지만 계속 매달려 있을 수 없어서 앞으로 차차 이해해 나가도록 하기로 했다. ㅎㅎ
728x90
반응형
'JavaScript' 카테고리의 다른 글
ES5 prototype(프로토타입) 상속기능. (0) | 2022.02.16 |
---|---|
Javascript <자바스크립트> this (0) | 2022.01.27 |
Javascript <자바스크립트> Map 메소드 사용하기. (0) | 2021.12.20 |
Javascript <자바스크립트> 재귀함수, 즉시실행함수. (0) | 2021.12.16 |
Javascript <자바스크립트> 연습 문제 풀이(split, array, for) (0) | 2021.12.14 |
Comments