English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
값 전달(콜 바이 바리어)은 가장 일반적인 평가 전략입니다: 함수의 매개변수는 호출할 때 전달된 실제 매개변수의 복사본입니다. 매개변수의 값을 변경하면 실제 매개변수에 영향을 미치지 않습니다.
값 전달(콜 바이 레퍼런스) 시, 함수의 매개변수는 실제 매개변수의 은밀한 참조를 받고 더 이상 복사본이 아닙니다. 이는 함수 매개변수의 값이 변경되면 실제 매개변수도 변경된다는 것을 의미하며, 두 가지 모두 동일한 값을 가리킵니다.
값 전달은 함수 호출의 추적을 더 어렵게 만들고, 때로는 미묘한 버그를 일으킬 수 있습니다.
값 전달은 항상 복사본을 클론해야 하므로, 일부 복잡한 타입에서 성능이 낮습니다. 두 가지 전달 방식 모두 각기 다른 문제가 있습니다.
JS의 기본 타입은 값 전달로 전달됩니다.
var a = 1; function foo(x) { x = 2; } foo(a); console.log(a); // 그래도1, x = 값이 아닙니다 2할당이 영향을 미칩니다
객체 전달에 대해 다시 보겠습니다:
var obj = {x : 1}; function foo(o) { o.x = 3; } foo(obj); console.log(obj.x); // 3, 수정되었습니다! var obj = {x : 1}; function foo(o) { o = 100; } foo(obj); console.log(obj.x); // 그대로입니다.1, obj는 수정되지 않았습니다.100.
객체의 값 전달은 참조 전달이 아닙니다. 실제로는 공유 전달(call by sharing)이라고 정확히 말할 수 있습니다. JS에서 기본 타입은 값 전달, 객체 타입은 공유 전달(공유 전달, 참조 전달, 참조 공유 전달)입니다.
이 전략의 주요 포인트는: 함수 호출 시 매개변수로 전달된 객체 실제 매개변수 참조의 복사본을 받는다는 것입니다(값 전달의 복사본이 아님, 참조 전달의 은닉 참조도 아님). 이는 참조 전달과의 차이점이 있습니다: 공유 전달에서 함수 형태 매개변수에 대한 할당은 실제 매개변수의 값에 영향을 미치지 않습니다.
결론적으로, 기본 타입은 값 전달로, 객체는 객체를 가리키는 주소를 전달하므로, 특별한 값 전달으로 간주할 수 있습니다. 함수 내에서 객체의 속성을操作하면 실제로는 해당 객체를 가리키는 객체의 속성을操作합니다. 그러나, 전체를 operation하면(예: o =) 100 또는 o = []는 실제로 새로운 객체를 정의한 것으로, 실제 매개변수의 참조 주소는 새로운 객체의 참조 주소이며, 원래 참조와는 아무런 관계가 없기 때문에 원래 객체에 대한 변경이 없습니다.
위에서 설명한 것처럼, JS는 값 전달인지 참조 전달인지에 대한 전체 지식을 소개했습니다. 많은 도움이 되었기를 바랍니다. 어떤 질문이나 의문이 있으면, 댓글을 남겨 주시기 바랍니다. 저는 즉시 답변을 드리겠습니다. 또한,呐喊 교본 사이트에 대한 지원에 감사드립니다!
선언: 이 문서의 내용은 인터넷에서 가져왔으며, 저작권은 원저자에게 있으며, 인터넷 사용자가 자발적으로 기여하고 업로드한 내용입니다. 이 사이트는 소유권을 가지지 않으며, 인공적인 편집 처리를 하지 않았으며, 관련 법적 책임도 부담하지 않습니다. 저작권 침해가 의심되는 내용이 있으면, notice#w로 이메일을 보내 주시기 바랍니다.3codebox.com(이메일을 보내는 경우, #을 @으로 변경하여 신고하시고 관련 증거를 제공해 주세요. 실제로 확인되면, 이 사이트는 즉시 저작권 침해 내용을 삭제할 것입니다.