2014-09-23 2 views
2

자주 난처한 상황에 빠지지는 않지만 지금 당장 단어가 손실됩니다.자바 스크립트 객체 동작

크롬 37.0.2062.120 분

를 사용

console.log();이 결과를보고 왜 누군가가 나에게 설명 할 수 있습니까?

JS 코드

var some_obj = {min:1}; 

var another_obj = {}; 

console.log(some_obj); 

another_obj['sometarget'] = some_obj; // <- What is this sorcery?!?!? 
another_obj['sometarget']['required'] = true; 

console.log(some_obj); 

CONSOLE.LOG() 출력

Object {min: 1} 
Object {min: 1, required: true} 

JSFIDDLE

http://jsfiddle.net/qrnaw7j2/1/

+0

그 결과 중 어떤 부분을 기대하지 않습니까? 네가 놀랐던 게 놀랍 니? –

+0

검색을하면 몇 백 개의 중복을 발견 할 수 있습니다. 여기에 하나 -> ** http : //stackoverflow.com/questions/9437981/object-pass-by-reference** – adeneo

답변

6

자바 스크립트의 개체는 참조를 통해 공유됩니다.

따라서 some_objanother_obj['sometarget']은 메모리의 같은 위치를 가리 킵니다.

['required'] = true;을 설정하면 둘 다 업데이트됩니다.

+0

자바 스크립트의 객체는 참조로 전달되지 않습니다! – adeneo

+0

개체에 대한 포인터는 아닙니다. 그러나 개체 자체는 메모리에서 같은 위치를 공유하기 때문에 동일 개체와 실제로 '연결'됩니다. 그래서 그것은 표기법에 따라 달라질 것입니다 : –

+1

일반적으로 "참조 사본"또는 "참조 유사"라고합니다. 자바 스크립트에는 포인터가 없으며 참된 참조를 전달하지 않습니다. – adeneo