2017-11-27 4 views
1

js 알아요? : D js에서 참조하는 방법은 무엇입니까?

let obj = {} 
    let anotherObj = obj 

지금 anotherObjobj에 참조로 {} 값을 포함한다. 따라서 anotherObjobj에 대한 참조 만 있습니다. 그러나 새로운 값을 obj에 재 할당 할 때 js에서 할당하는 방식이 이런 식으로 작동하는 이유는 무엇입니까? 는 그리고이 기능은 아직 {} 값을 포함 anotherObj

anotherObj // {} 
    obj = null 
    anotherObj // {} 

변수 유용한 monkeypatching의 기술을 제공하는 것을 알고있다. 그러나anotherObjobj에 대한 참조이며, 나는 당신이 방법이 "참조"일을 오해하고 null

+0

그 질문에 대한 답을보십시오. – jhpratt

답변

1

obj로 포함해야 이해. 당신이 볼 때 당신은 당신이 obj 참조 객체와 객체를 참조 anotherObj 참조를 obj 생각하고 ...

var obj = {}; 
var anotherObj = obj; 

... C에서처럼 pointers의 관점에서 생각하고있다. 당신은 참조 사슬의 관점에서 생각하고 있습니다. 하지만 pointers 또는 다른 주소 공간 참조를 사용하지 않는 한 대부분의 언어에서 할당이 작동하는 방식이 아닙니다.

대신에 var obj = {};은 어떤 메모리 위치에 객체를 생성하고 obj에는 해당 메모리 위치가 포함됩니다. var anotherObj = obj;을 수행하면 obj이 해당 메모리 위치로 계산되고 해당 메모리 위치가 이제 anotherObj 값으로 할당됩니다. 이제 anotherObj이 아닌 obj을 가리키는 대신 objanotherObj이 obj의 동일한 메모리 위치를 가리키고 있습니다.

따라서 obj = null을 입력하면 obj이 가리키는 값이 변경됩니다. anotherObj은 여전히 ​​생성 된 개체의 메모리 위치를 가리 킵니다.

제 생각에 모든 개체 참조를 업데이트하거나 수동으로 개체를 삭제할 수있는 방법이 없습니다 (예 : 수행하려는 것처럼 null으로 대체). 당신의 목적이 객체 라이프 사이클을 관리하기위한 목적으로 그렇게하려고한다면, 당신은 실망하게 될 것입니다. 대신 전역 변수에 개체를 저장 한 다음 여러 로컬 참조와 달리 전역 참조를 사용하는 등의 대체 접근 방식을 취해야합니다.

+0

고마워, 알았다. –

관련 문제