함수의 호출방식
call by value : 값에 의한 호출
1. 함수가 호출될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시 공간이 생성된다.
(c++의 경우 stack frame 함수가 종료되면 해당 공간은 사라진다.
2. 스택 프레임(Stack Frame) : 함수 호출시 할당되는 메모리 블록(지역변수의 선언으로 인해 할당되는 메모리 블록)
3. call by value 값에 의한 호출방식은 함수 호출시 전달되는 변수의 값을 복사하여 함수의 인자로 전달한다.
4. 복사된 인자는 함수 안에서 지역적으로 사용되는 local value의 특성을 가진다. 따라서 함수 안에서 인자의 값이 변경되어도, 외부의 변수의 값은 변경되지 않는다.
5. Java의 경우 함수에 전달되는 인자의 데이터 타입에 따라서 (원시자료형 / 참조자료형) 함수 호출 방식이 달라진다.
- 원시 자료형 (Primitive type) : call by value 동작 (int, short, long, float, double, char, boolean )
- 참조 자료형 (reference type) : call by reference 동작 (Array, Class Instance)
var a = 1;
var func = function(b) { // callee
b = b + 1;
}
func(a); // caller
console.log(a); // 1
call by reference (참조에 의한 호출)
1. 함수가 호출될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시 공간이 생성된다.(예 : stack frame) 함수가 종료되면 해당 공간은 사라진다.
2. call by reference 참조에 이한 호출방식은 함수 호출시 인자로 전달되는 변수의 레퍼런스를 전달한다. (해당 변수를 가르킨다.) 따라서 함수 안에서 인자의 값이 변경되면, 아규먼트로 전달된 객체의 값도 함께 변경된다.
var a = {};
var func = function(b) { // callee
b.a = 1;
}
func(a); // caller
console.log(a.a); // 1
'Study > JavaScript' 카테고리의 다른 글
[Javascript Libliry] The 40 Best JavaScript Libraries and Frameworks for 2021 | 2021 년 40 개 최고의 자바 스크립트 라이브러리 및 프레임 워크 (0) | 2021.07.20 |
---|---|
[JavaScript] GSAP | TweenMax 쉽게 애니메이션을 구현하는 방법 (0) | 2021.07.18 |
[JAVASCRIPT] 변수 선언 var,let,const의 차이점을 알아보자. (0) | 2021.03.30 |
[클로저] 클로저를 활용할 때 주의사항 (0) | 2019.06.16 |
[클로저] 함수의 캡슐화 (0) | 2019.06.16 |