반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 컴퓨터비전
- 네트워크
- 컴퓨터과학
- 코딩
- 네트워크보안
- 머신러닝
- 소프트웨어
- 자바스크립트
- 알고리즘
- 2
- 데이터과학
- 프로그래밍
- 소프트웨어공학
- 데이터구조
- 파이썬
- I'm Sorry
- 자료구조
- 데이터베이스
- 인공지능
- 사이버보안
- 컴퓨터공학
- 프로그래밍언어
- 웹개발
- 빅데이터
- 보안
- 클라우드컴퓨팅
- Yes
- 데이터분석
- 버전관리
- 딥러닝
Archives
- Today
- Total
스택큐힙리스트
자바스크립트는 참조에 의한 전달(pass-by-reference) 또는 값에 의한 전달(pass-by-value) 언어입니까? 본문
카테고리 없음
자바스크립트는 참조에 의한 전달(pass-by-reference) 또는 값에 의한 전달(pass-by-value) 언어입니까?
스택큐힙리스트 2024. 1. 28. 19:09반응형
기본 타입 (숫자, 문자열 등)은 값을 통해 전달되지만 객체는 알려지지 않았습니다. 객체는 값에 의해 전달될 수도 있으며 (이 경우에는 객체를 보유하는 변수가 사실상 객체에 대한 참조로 간주됨) 참조에 의해 전달될 수도 있습니다 (이 경우에는 변수가 객체 자체를 보유함으로 간주됨).
끝에서 정말 중요하지 않지만, 인자 전달 규칙을 올바르게 표시하는 방법을 알고 싶습니다. 이에 관한 자바스크립트 명세서에서 정의된 내용이 있을까요?
답변 1
- 만약
obj1
이 전혀 참조가 아니라면,obj1.item
을 변경해도 함수 밖의obj1
에는 영향이 없을 것입니다. - 만약 인수가 적절한 참조였다면, 모든 것이 변경되었을 것입니다.
num
은100
이 되고,obj2.item
은changed
로 읽혀졌을 것입니다. 대신에num
은10
으로 유지되고obj2.item
은unchanged
상태입니다.
대신, 전달된 항목은 값을 전달받습니다. 그러나 값으로 전달받은 항목은 자체적으로 참조입니다.
기술적으로, 이것은 call-by-sharing이라고 합니다.
실제로는, 이는 매개변수 자체 (num
과 obj2
와 같은)를 변경하면 그 매개변수에 전달된 항목에 영향을 주지 않는다는 것을 의미합니다. 그러나 매개변수의 내부를 변경하면 (예: obj1
과 같은) 전파될 것입니다.
답변 2
자바스크립트는 pass-by-value를 따르는 언어입니다. 이는 변수를 전달할 때 변수의 값을 복사하여 전달하는 방식을 의미합니다.pass-by-value 방식은 변수의 값을 복사하여 전달하기 때문에, 변수의 원래 값은 변경되지 않습니다. 따라서 함수 내에서 전달된 변수의 값을 변경하더라도, 원래 변수에는 영향을 주지 않습니다.
예를 들어, 다음과 같은 코드를 고려해봅시다:
```
function updateValue(value) {
value = 42; // 전달된 value의 값을 변경
}
var num = 10;
updateValue(num);
console.log(num); // 출력 결과: 10
```
이 코드에서 함수 `updateValue`는 전달된 `value` 변수의 값을 변경하려고 합니다. 하지만 결과를 보면, 원래 `num` 변수의 값은 여전히 10으로 유지되었습니다. 이는 pass-by-value 방식으로 인해 변수의 값이 함수 내부에서 변경되더라도, 원래 변수에는 영향을 주지 않기 때문입니다.
물론, 객체나 배열과 같은 참조 타입의 경우에는 pass-by-reference 처럼 동작할 수 있습니다. 이는 참조 타입의 데이터가 변수에 직접 저장되는 것이 아니라, 변수에는 객체나 배열의 주소 값이 저장되기 때문입니다. 하지만 여전히 pass-by-value 측면에서 접근하면 변수에는 값을 복사하여 전달하는 것이기 때문에, 원래 변수의 값을 변경하는 것은 불가능합니다.
따라서, 자바스크립트는 pass-by-value를 따르는 언어이며 변수의 값을 복사하여 전달하는 방식으로 동작합니다. 이는 변수의 원래 값을 보존하며, 예기치 않은 부작용을 방지하는 데에 도움을 줍니다.
반응형
Comments