2016-10-15 5 views
6

일반적인 자바 스크립트 질문이 있습니다.객체 대 ID 전달

배열이 persons 인 경우 Person 개체가 있다고 가정 해 보겠습니다. 각 Person는 ID, 이름, adresses 등 persons를 처리 내 기능에서

을 가지고, 나는 보통 내가 조작하고있어 Person 객체를 전달합니다. 그러나 이것은 어떻게 든 잘못 생각합니다. 나는 기억을 낭비하고있는 것처럼.

그래서 내 질문 : 나는 개체를 전달하는 대신 단지 자신의 ID 년대에 의해 여분의 메모리를 사용

  • 건가요?
  • getPersonByID()를 사용하고 있는데 더 나은 옵션 대신 ID를 전달하고 있습니까?
  • 많은 개체 인스턴스를 어떻게 관리합니까?
+1

JS에서는 객체에 대한 참조를 객체에 전달하지 않으므로 객체에 대한 참조는 메모리에 큰 영향을 미치지 않습니다. – Redu

+0

가능한 [JavaScript가 참조 기준 또는 전달 값 언어입니까?] (http://stackoverflow.com/q/518000/1529630) – Oriol

답변

4

ID 대신 객체를 전달하여 여분의 메모리를 사용하고 있습니까?

아니요, 매번 복사본이 아닌 개체에 대한 참조를 전달하고 있습니다. 그래서 여분의 메모리는 주위 person 개체를 전달할 때마다 사용중인 ... 그래서 당신이 요청하는 경우 :

는 getPersonByID()를 사용하여 그냥 ID의 대신 더 나은 옵션을 전달 있습니까?

실제로 사람 목록을 통과하여 개체를 다시 가져 오는 오버 헤드를 추가하기 만하면됩니다.

많은 개체 인스턴스를 어떻게 관리합니까?

범위와 같은 사람, 참조하는 사람 등에 따라 달라집니다. 더 잘 이해하려면 how JS garbage collection and memory management works을 살펴 보시기 바랍니다.

+0

답해 주셔서 감사합니다. 그럼에도 불구하고 다음과 같은 경우 : – whateverforever

+0

그래서 다음과 같은 경우 : var members = []; var activeMembers = []; members.push (새 Person()); members.push (새 Person()); activeMembers.push (members [0]); 메모리는 * 두가'Person'이 오른쪽 객체 객체 activeMembers' *'members'object * '를 개최한다? 꽤 괜찮은데. – whateverforever

+0

죄송합니다. 차단 코드가 작동한다고 생각했습니다. 어쨌든, 당신의 도움을 주셔서 감사합니다 – whateverforever

2

JavaScript의 개체 값은 입니다.입니다. 객체에 함수를 넘겨 주면 객체에 대한 참조가 전달되며 문자열 (예 : id 값) 또는 숫자를 전달하는 것보다 비용이 많이 들지 않습니다.

다른 방법으로 말하면 : 객체 값을 전달하거나 할당하면 이 아닌이 객체의 복사본을 생성합니다.

1

자바 스크립트에서 개체 (개체 리터럴, 배열 및 함수)는 모두 참조로 전달됩니다. 객체를 함수에 전달할 때 C/C++에서 일반적으로하는 것처럼 복사하지 않습니다. 대신 참조 (기본적으로 객체의 두 번째 이름)를 전달합니다. 다른 측면에서 ID를 전달

function func(object) { object.changed = true; } 
let a = {}; 
func(a); 
console.log(a.changed); //true 

실제로 추가 오버 헤드를 생성하고 응용 프로그램을 설계하는 방법을 당신까지 정말 훨씬 더 자세한 될 것입니다.