JavaScript에서는 모든 변수가 값으로 전달됩니다. 즉, 원래 값의 복사본이 만들어지고 함수에 전달됩니다. 그러나 값이 배열이나 객체 리터럴과 같은 객체인 경우 복사본은 원본 객체에 대한 참조입니다.
function f(a, b, c) { a = 3; // Reassignment changes the local variable only. b.push("foo"); // Property change affects the original object. c.first = false; // Property change affects the original object. } const x = 4; let y = ["eeny", "miny", "mo"]; let z = { first: true }; f(x, y, z); console.log(x, y, z.first); // Output: 4, ["eeny", "miny", "mo", "foo"], false
위 예시에서는 b, c 객체의 변경사항이 반영되었습니다. a를 재할당해도 아무런 효과가 없습니다.
자세한 예:
function f() { const a = ["1", "2", { foo: "bar" }]; const b = a[1]; // Copy the reference to the original array element a[1] = "4"; // Change the value in the original array console.log(b); // Output: "2" (Original value of the copied reference) }
첫 번째 예에서는 a가 수정되었지만 b는 참조의 복사본이므로 여전히 원래 값을 유지합니다.
function f() { const a = [{ yellow: "blue" }, { red: "cyan" }, { green: "magenta" }]; const b = a[1]; // Copy the reference to the original object a[1].red = "tan"; // Change the property in the original object console.log(b.red); // Output: "tan" (Property change is reflected in both variables) b.red = "black"; // Change the property through the reference console.log(a[1].red); // Output: "black" (Property change is reflected in both variables) }
두 번째 예에서는 a[1].red는 동일한 객체 참조를 공유하기 때문에 a와 b 모두에 영향을 줍니다.
객체의 완전히 독립적인 복사본을 생성하려면, JSON.parse() 및 JSON.stringify() 메서드를 사용하여 객체를 각각 역직렬화 및 직렬화할 수 있습니다. 예:
const originalObject = { foo: "bar" }; const independentCopy = JSON.parse(JSON.stringify(originalObject));
위 내용은 JavaScript는 기본 유형 및 객체의 값별 전달 및 참조별 전달을 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!