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
영향을주지 않습니다.- 논쟁이 적절한 참조 였다면 모든 것이 변경되었을 것입니다.
num
은100
이고obj2.item
은"changed"
읽습니다.
대신 전달 된 항목이 값으로 전달되는 상황입니다. 그러나 값으로 전달되는 항목은 그 자체 가 참조입니다. 기술적으로이를 공유 별 통화 라고합니다.
실제로는 매개 변수 자체를 변경하면 ( num
및 obj2
와 같이) 매개 변수에 입력 된 항목에 영향을주지 않습니다. 그러나 매개 변수의 내부 를 변경하면 백업이 전파됩니다 ( obj1
과 마찬가지로).
출처 : https://stackoverflow.com/questions/518000/is-javascript-a-pass-by-reference-or-pass-by-value-language
728x90
반응형
'프로그래밍 언어 > HTML,CSS,JS' 카테고리의 다른 글
Firebug 또는 유사한 도구를 사용하여 JavaScript / jQuery 이벤트 바인딩을 디버깅하는 방법 (0) | 2021.12.10 |
---|---|
Chrome의 코드에서 JavaScript 중단점을 설정하는 방법 (0) | 2021.12.10 |
Lodash와 Underscore.js의 차이점 (0) | 2021.12.09 |
JavaScript에서 배열을 통해 반복하는 여러 방법 (0) | 2021.12.08 |
jQuery / JavaScript 이미지 오류 발생시 대체 이미지를 사용하는 방법 (0) | 2021.12.08 |