2017-03-15 15 views
2

왜 아래 질문에서 출력이 달라 집니까?함수에서 참조로 빈 개체를 전달합니다.

Q1

function foo(x){ 
    x.x=20; 
} 

var abc= {}; 

foo(abc); 

console.log(abc);// prints an object with x=20 

Q2 둘 사이의 차이는 무엇

function foo(x){ 
    x={ 
     y:10 
     }; 

} 


var abc= {}; 

foo(abc); 

console.log(abc);// prints an empty object 

, 왜 두 번째 경우에 빈 객체를 인쇄 않습니다.

+1

이해하기 commeted 라인 읽기 '. –

+0

함수 매개 변수 ('x')를 새 값으로 덮어 쓰는 것은 함수 외부의 세계에는 영향을 미치지 않습니다. 그렇게하지 않으려면 일반적으로 지점을 만들어야합니다. – JLRishe

답변

3

Q1에서 foo은 참조를 유지하므로 변경 사항이 모든 곳에서 반영됩니다.

그러나 Q2에서 이전 참조를 제거하고 새 참조를 할당 한 전달 된 변수를 다시 초기화했습니다. Q2 인쇄 비어 abc을 전달하기 전에 그것을 변경하지 않은 방법에 통과 한 후, 빈 개체 이유입니다

.

+0

감사합니다 anik 내 대답을 가지고 – user2735203

+0

@ user2735203이 대답을 표시하는 것을 잊지 마세요 :) –

1

`x`와`abc` different.`abc`이 참조되어 있지 않은 X '번째 경우

Q1

function foo(x){ 
    x.x=20; 
} 

var abc= {}; 

foo(abc); //foo set abc.x=20 

console.log(abc); 

Q2

function foo(x){ 
    x={ 
     y:10 
     }; 

} 


var abc= {}; 

foo(abc); //foo create a new object and assign it in x. So abc hold by x is overriden 

console.log(abc); 
+0

감사합니다 Sagar 내 대답을 가지고 – user2735203

관련 문제