>웹 프론트엔드 >JS 튜토리얼 >JavaScript의 값별 전달 메커니즘은 함수의 기본 변수와 개체 변수에 어떤 영향을 줍니까?

JavaScript의 값별 전달 메커니즘은 함수의 기본 변수와 개체 변수에 어떤 영향을 줍니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-18 04:34:17224검색

How Does JavaScript's Pass-by-Value Mechanism Affect Primitive and Object Variables in Functions?

JavaScript의 참조에 의한 전달과 값에 의한 전달 이해

JavaScript에서 함수에 전달된 매개변수는 항상 값에 의해 전달됩니다. 이는 원래 값의 복사본이 생성되고 원래 값은 복사본에 대한 변경 사항에 의해 영향을 받지 않음을 의미합니다. 그러나 값이 객체(배열 포함)인 경우 생성된 복사본은 원본 객체에 대한 참조입니다.

이 개념은 함수 내에서 변수가 수정될 때 변수의 동작에 영향을 미칩니다.

  • 기본 값(예: 숫자, 문자열): 기본 값이 인수로 전달되고 함수 내에서 수정되면 함수 외부의 원래 값 변경되지 않습니다.
  • 객체(예: 배열, 객체): 객체가 인수로 전달되고 함수 내에서 수정되면 함수 외부의 원래 객체도 수정됩니다. 이는 함수가 원본 개체의 복사본을 수신하더라도 실제로는 메모리에 있는 동일한 기본 개체에 대한 참조이기 때문입니다. 따라서 함수 내에서 참조된 개체의 속성을 수정하면 함수 외부의 원래 개체에 영향을 미칩니다.

예:

function f(a, b, c) {
    a = 3; // Re-assigns a to a new primitive value
    b.push("foo"); // Adds a new property to b, modifying the referenced object
    c.first = false; // Modifies a property of the referenced object
}

이 예에서는 x, y, 함수 외부의 z는 다음 값을 갖습니다. x는 4(기본 값)로 변경되지 않고 유지되고, y는 이제 추가 속성 ["foo"](객체 속성 추가됨)을 가지며, z.first false로 설정됩니다(객체 속성 수정됨).

객체의 완전히 독립적인 복사본을 생성하려면 해당 객체의 모든 속성을 새 객체에 명시적으로 복사해야 합니다. 이는 Object.sign() 메서드를 사용하거나 객체를 순회하고 이전 속성을 기반으로 하는 새 속성을 사용하여 새 객체를 생성함으로써 수행할 수 있습니다.

위 내용은 JavaScript의 값별 전달 메커니즘은 함수의 기본 변수와 개체 변수에 어떤 영향을 줍니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.