Call by reference와 Call by value
변수의 조작
자바스크립트는 세가지 주요한 방식을 통해 데이터의 값을 조작할 수 있다.
- 값을 새로운 변수에 할당하여 사용할 수 있다.
- 값을 함수나 메서드의 전달인자로 넘겨줄 수 있다.
- 데이터의 두 값이 동일한지를 알아보기 위해 한 값과 다른 값을 비교할 수 있다.
이러한 데이터 값을 조작하는 방식은 2가지로 나뉘는데, 그것이 기본형 데이터(값에 의한-by value)
와 참조형 데이터(by-reference)
이다.
기본형 데이터(값에 의한-by value)
종류- Number, String, boolean, null, undefined
기본형 데이터를 조작할 때 가장 중요한 것은 데이터 값이다. 값을 할당할 때에 기본형 데이터의 경우 실제 그 값이 복사되며, 복사시 해당 데이터는 변수, 객체 프로퍼티, 배열 원소에 저장되어 원본 데이터와는 별도의 독립적인 값
이 된다. 따라서 값을 변경한다고 하여 원본 데이터에는 아무런 영향을 미치지 않는다.
1 | var original = 1; |
위의 소스에서 보면 ‘original’ 이라는 변수에서 값을 할당한 후, ‘copy’ 라는 변수에 ‘original’ 변수의 값을 복사하였다. 그 후 원본 ‘original’ 변수의 값을 바꾸고 나서 값을 보면 원본은 변경이 되었지만 ‘copy’ 라는 변수의 값은 변경되지 않았다.
이러한 데이터는 함수 내에서 값을 변경하면 함수에 전달된 데이터만 변경될 뿐 함수 전달된 원본 복사본에는 아무런 영향을 미치지 않는다.
1 | // input your code herevar original = 1; |
참조형 데이터(by-reference)
종류- Object, Array, function
참조형 데이터의 경우는 값에 대한 실제 복사본이 오직 하나만 존재하며, 참조형 데이터는 그 값의 주소를 말 그대로 참조 할 값의 복사본이나 값 자체가 할당되지 않는다. 참조에 의해 할당된 새 변수는 원본 변수가 가르키는 값과 동일한 값
을 가르킨다. 원본 변수와 할당된 변수는 모두 동등하며, 값을 조작하는데 사용될 수 있다. 그래서 할당된 변수(참조)가 변경되면 원본 변수에서도 동일하게 변경된다.
1 | var original = [1,2,3,4,5]; |