일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- hokeys
- 호키도키
- react
- TDD
- 힛잇
- 리액트 예제
- Hitit
- hokidoki
- HTML
- jest
- 호키스
- 자료구조
- data structure
- 스벨트
- 자바스크립트
- 개발자
- 개발
- IOS
- 계명대 이종호
- 리액트
- 비동기
- 이종호
- queue
- Svelte
- 자바스크립트 자료구조
- SWIFT
- 계명대
- 스위프트
- 자스민
- javascript
Archives
- Today
- Total
Dog foot print
[javascript] Call By Reference , Call By Value 본문
c언어나 c++같은 언어를 배우는 사람들은 swap(int a, int b) 같은 함수를 만들때 인자로 그냥 일반자료형이 아니라 포인터라는 것을 넘겨주어야 우리가 원하는 결과가 나오는 것을 알것이다. 그러나 다행스럽게도(?) 자바스크립트에서는 포인터가 없다. 이 포인터라는 것이 없기 때문에 javascript에서는 함수의 인자로 기본자료형(string, numb, undefined,bullean,null)이 들어 왔을때 값을 복사한 변수를 새로 메모리에 만들게 된다. 그로인하여 함수의 결과는 새로운 메모리의 값을 변경하는 행위가 되고 실제 인자로 들어온 변수들의 메모리의 값을 변경하는 행위는 하지 못한다.
예제
let a = 10;
let b = 20;
function swap(x,y){
let temp = x;
x = y;
y = x; //이 함수내부에서 console.log()를 찍어보면 값은 바뀌어 있지만 이 함수내부에서만 유효하다.
}
swap(a,b);
console.log(a,b); //결과는 여전히 10과 20이 출력된다.
다만 전역변수를 이용하여 값을 변환시키는 행위는 가능하다.
let a = 10;
let b = 20;
function callByReference(){
let temp = a;
a = b;
b = temp;
}
callByReference();
console.log(a,b); //결과는 20 , 10 이 출력된다.
Call By Reference 메모리 영역에 의한 참조
기본자료형 이외에 배열이나 객체를 전달하면 해당 객체의 프로퍼티나 배열의 item을 변경, 추가 할 수 있다.
let obj = {
property : 100
}
function change(obj){
obj.property = 200;
}
change(obj);
console.log(obj); //결과는 200
function push(array){
array.push(3);
}
let array = [1,2];
push(array);
console.log(array); //결과는 1,2,3
다만 인자로 들어온 객체나 배열을 재할당하여 다른 기본 자료형으로 만들려고 할때는 call by value가 되어 해당 함수 내부에서만 유효하다.
let obj = {
property : 100
}
function change(obj){
obj = "obj";
}
change(obj);
console.log(obj); //결과는 200
function push(array){
array = "array";
}
let array = [1,2];
push(array);
console.log(array); //결과는 1,2,3
반응형
'Javascript' 카테고리의 다른 글
[javascript] 정규표현식이란 ? (0) | 2019.07.19 |
---|---|
[javascript] 단순 연결리스트 만들기 linked-list (0) | 2019.07.18 |
[javascript] Deck 구현 하기 (0) | 2019.07.16 |
[javascript] es6에서 es5로 만들어주는 babel (0) | 2019.07.15 |
[javascript] 화살표 함수 , arrow function (0) | 2019.07.12 |
Comments