2014-07-17 2 views
1

자바 스크립트의 객체는 함수 참조에 의해 전달된다는 것을 알고 있습니다.Javascript - 참조로 전달 된 수정 된 객체를 반환하십시오.

그런 의미에서 객체를 수정하는 함수가 있다면 그 객체를 반환하고 원본을 덮어 쓸 것인가?

즉,이 대이

function inc(obj) 
{ 
    obj.count++; 
} 

obj = {count : 0, topic : 'Something'}; 
inc(obj); 

:

더 나은 이유는 하나입니다
function inc(obj) 
{ 
    obj.count++; 
    return obj; 
} 

obj = {count : 0, topic : 'Something'}; 
obj = inc(obj); 

?

+1

JS가 참조를 복사하여 함수가 원본 개체에서 작동한다는 것을 이미 알고있는 경우 왜 그것이 차이를 만들 것이라고 생각하십니까? 귀하의 질문은 자의적인 것으로 보입니다. "1 + 2는 2 + 1과 같은 결과를 낳을 것이므로 어떤 순서를 사용해야합니까?"라고 말하는 것과 같습니다. * –

+0

"더 좋습니까? 어떤 기준으로? – RobG

답변

2

함수가 전달 된 값을 반환하면 실제로는 아무 것도 없습니다. 외부 변수 "obj"의 값은 함수에 의해 어떠한 경우에도 변경 될 수 없습니다.

JavaScript의 모든 내용이 "참조로 전달됨"이라고 말하는 것이 정확하지 않습니다. 개체 "values"는 이고 항상 참조이며 매개 변수 전달도 예외는 아닙니다. JavaScript는 엄격하게 pass-by-value 언어입니다. 그것은 단지 객체에 대한 참조가 객체에 대한 참조라는 것입니다. 그래서 당신이 질문을 할 때 말한 것은 정확합니다 : 객체에 대한 참조 사본이 함수로 전달됩니다. 매개 변수 전달의 주제는 간단하지만 복잡하고 "참조"라는 단어가 기술 "언어 이론"용어 인 "참조 별 전달"에 나타나기 때문에 복잡하지 않고 복잡합니다.

이제 함수가 어떤 이유에서 개체를 만들어야한다고 결정한 다음 개체를 반환하는 것이 의미가있을 수 있습니다.

+0

죄송합니다. 제 2 케이스와 실수였습니다. 나는 카운트를 증가시키고 그 다음 전체 객체를 리턴하려고했다. 제발. – Kousha

+0

@Kousha ok 답변을 업데이트하겠습니다. – Pointy

+0

감사합니다.이 말이 더 합리적입니다. 타이머가 다 떨어지면 투표 할 것입니다. – Kousha

관련 문제