2017-12-20 19 views
0

, x = { greet: hi } 저장 기준에 객체 참조는 x 실제 값 (y=10) 다음 코드왜 첫 번째 변수가 최초의 개체를 참조하는 변수를 유지하는 두 번째 변수는 첫 번째가 새 개체를 참조 할 때 업데이트되지 않습니다. 이해 된 바와 같이

, console.log(y){greet: "hi"} 출력을 길게 프리미티브 타입 달리 { greet: 하이 } 개체한다.

x OBJ 심판이 라인 x = {greet: 'hello'};에 새로운 객체가 생성되고 있기 때문에 x = {greet: 'hello'}

var x = {greet: 'hi'}; 
var y = x; 
x = {greet: 'hello'}; 

console.log(y); 
console.log(x) 
+0

당신이 묘사하는 것은'y = x'가'y'와'x'의 * alias *를 만드는 것을 의미합니다. 즉 그것들은 실제로 모두 동일한 변수입니다. 그것이 작동하는 방식이 아닙니다. 당신은 단지'x'에 저장된 객체 참조를'y'에 할당하는 것뿐입니다. – deceze

+0

@deceze 복제본인지 잘 모르겠습니다. – Rajesh

+0

@OP, 개체는 참조를 사용하여 할당/복사됩니다. 즉,이 메모리 위치에서 객체의 메모리 위치와 액세스 속성을 교환하고 있다는 뜻입니다. 따라서 하나의 변수에서 속성을 변경하는 것은 다른 변수에서 반영됩니다. 이제 당신이'x = {greet : 'hello'};'를 할 때, 당신은 참조 자체를 대체 할 것입니다. 이제 변수는 다른 위치에 대한 포인터를 보유하고 이전 위치의 객체는 그대로 유지됩니다. 아무도 그것을 참조하지 않으면 GC가 제거합니다. – Rajesh

답변

1

를 가리 키도록 업데이트 될 때 y 객체 참조가 {greet: 'hello'}를 가리 키도록 업데이트되지 않습니다.

오래된 개체를 업데이트하려면 x.greet = 'hello';을 사용하십시오.

var x = {greet: 'hi'}; 
 
var y = x; 
 
x.greet = 'hello'; 
 

 
document.getElementById("text_show").innerHTML= x.greet + " | " + y.greet;
<div id="text_show"></div>

JavaScript

+0

실제로.기본적으로, 당신은'x.greet = "hello"'를 사용하여 x를 바꾸면, 당신이 기대하는 것을 볼 수 있습니다 (@OP). 이 경우'y'는'x'처럼 보일 것입니다. – Adelin

0

왜 Y 객체 참조를 가리 키도록 업데이트되지 않는 개체에 대해 알고 here를 참조 {인사 : 를 '안녕하세요'} X OBJ 심판이 업데이트 될 때 x = {greet : 'hello'}

새 참조를 지정 했으므로 으로, y은 여전히 ​​원래의 것을 가리키고 있습니다.

당신이 x 당신이 xy를 가리키는되지 , 가리키는 것을 같은 기준에 y를 가리키는

var y = x; 

을 말할 때.

+0

'당신은 y를 x로 가리키고 있지 않습니다 .' 정확하게, x는 참조이고'var y = x'를 쓸 때 그 참조 또한'y'에 복사됩니다. 그래서 언제 그 참조는'x'에서 변화가'y'에도 전파되어야합니다. 권리? – dkjain

+0

* x에서 참조가 변경되면 변경 사항이 y에도 전파되어야합니다. * 아니요, 참조 값 자체가 변경된 경우 x는 새로운 참조 (새 객체)를 가리키고 y는 이전 참조를 계속 가리 킵니다. 예를 들어 값이 변경되면'var x = {greet : 'hi'}; var y = x; x.greet = 'hello';''y.greet'도 변경되었습니다. – gurvinder372

+0

좀 더 직접적인 설명 [here] (https://stackoverflow.com/questions/639514/how-can-i-get-the-memory-address-of-a-javascript-variable)을 찾아보십시오. > 자바 스크립트의 평가 전략은 항상 값에 의한 호출을 사용하는 것이지만, 객체 (배열 포함)의 경우 전달 된 값은 복사 또는 복제되지 않은 객체에 대한 참조입니다. 함수에서 Object 자체를 재 할당하면 원본은 변경되지 않지만 Object 속성 중 하나를 재 할당하면 원래 Object에 영향을줍니다. – dkjain