프로그래밍 언어/HTML,CSS,JS

JavaScript는 래퍼런스에 의한 전달일까? 값에 의한 전달일까?

Rateye 2021. 12. 9. 10:49
728x90
반응형
질문 : JavaScript는 참조에 의한 전달 또는 값에 의한 전달 언어입니까?

기본 유형 (숫자, 문자열 등)은 값으로 전달되지만 객체는 모두 값으로 전달 될 수 있기 때문에 알 수 없습니다 (객체를 보유하는 변수가 실제로 객체에 대한 참조라고 생각하는 경우) ) 및 참조에 의해 전달 (객체에 대한 변수가 객체 자체를 보유한다고 생각할 때).

마지막에는 실제로 중요하지 않지만 규칙을 전달하는 인수를 제시하는 올바른 방법이 무엇인지 알고 싶습니다. 이것에 관한 의미론을 정의하는 JavaScript 사양에서 발췌 한 내용이 있습니까?

답변

JavaScript에서 흥미 롭습니다. 이 예를 고려하십시오.

function changeStuff(a, b, c)
{
  a = a * 10;
  b.item = "changed";
  c = {item: "changed"};
}

var num = 10;
var obj1 = {item: "unchanged"};
var obj2 = {item: "unchanged"};

changeStuff(num, obj1, obj2);

console.log(num);
console.log(obj1.item);
console.log(obj2.item);

이것은 출력을 생성합니다.

10
changed
unchanged
  • obj1 이 전혀 참조가 아니라면 obj1.item 을 변경해도 함수 외부의 obj1 영향을주지 않습니다.
  • 논쟁이 적절한 참조 였다면 모든 것이 변경되었을 것입니다. num100 이고 obj2.item"changed" 읽습니다.

대신 전달 된 항목이 값으로 전달되는 상황입니다. 그러나 값으로 전달되는 항목은 그 자체 가 참조입니다. 기술적으로이를 공유 별 통화 라고합니다.

실제로는 매개 변수 자체를 변경하면 ( numobj2 와 같이) 매개 변수에 입력 된 항목에 영향을주지 않습니다. 그러나 매개 변수의 내부 를 변경하면 백업이 전파됩니다 ( obj1 과 마찬가지로).

출처 : https://stackoverflow.com/questions/518000/is-javascript-a-pass-by-reference-or-pass-by-value-language
728x90
반응형