하지만 객체를 넘기면 Call by reference지. obj = {param1: 10}; func (obj); alert (obj.param1); function func (o) { o.param1++; }
ㅅㅅㅅ(175.252)2015-11-01 22:38
객체를 넘겨도 값으로 전달된다
아둔(220.117)2015-11-01 22:39
자바스크립트는 함수가 오로지 매개변수로 복사된값만 받는다이기야!
아둔(220.117)2015-11-01 22:40
시크 // 니 말은 기계어 레벨에서 볼 때의 이야기고. 하이레벨이면 하이레벨 수준에서 얘기해야지. C언어 포인터는 Call by value지만 C++의 레퍼런스 타입의 인자는 Call by reference임. 내부적으론 포인터 넘기는 걸로 구현되어있겠지만 표면적으론 그게 안 드러나니깐.
ㅅㅅㅅ(175.252)2015-11-01 22:40
아둔 // 내가 준 코드 실행시켜 보기나 하고 말해.
ㅅㅅㅅ(175.252)2015-11-01 22:40
객체를 전달받아서 객체의 값을 바꿀 수 있습니까? 없습니까?
NoOTL(shippuden91)2015-11-01 22:40
거참... 자바스크립트는 복사된값만 받는다구요..
아둔(220.117)2015-11-01 22:41
자바스크립트, 자바 등에서는 객체 변수는 객체 그 자체가 아니라 (즉, C의 구조체 변수랑 다르게) 객체를 가리키는 레퍼런스 (포인터에서 주소 개념만 없앤 논리적인 포인터랄까) 기 때문에, 함수에 인자로 객체를 넘기면 Call by value로 넘어가는데 그게 객체 그 자체가 값으로 가는 게 아니라 객체에 대한 참조가 카피되는 거임.
ㅅㅅㅅ(175.252)2015-11-01 22:43
맞음 c++ 레퍼런스는 수정 불가 개념이지만
걍.인라인 어셈열어서 eax 같은거 써진 주소값 바꾸면 댐
시크(223.62)2015-11-01 22:43
유지보수 개빡치게 코딩하는법 ㅇ
시크(223.62)2015-11-01 22:43
즉, 객체 내부에 값을 담아 보냄으로써 Call by reference가 구현된다. 아직도 이해가 안됨? 그럼 노답이고 뭐.
ㅅㅅㅅ(175.252)2015-11-01 22:43
레퍼런스는 언어적 개념이니까 구현하기 나름이라는 뜻
시크(223.62)2015-11-01 22:44
아랫단은 전부 값에 의한 호출이라는걸 말할뿐
시크(223.62)2015-11-01 22:46
시크 // 그렇게 치면 call by value라는 용어 자체를 만들 이유가 없지. 그런 용어를 만든 건 논리적인 구분을 하기 위함임. call by value, call by reference의 구분은 함수를 호출하는 코드에서 값을 직접 넘겨주고 있느냐, 그렇지 않고 참조를 넘겨주느냐로 구분. 어셈이 어떻게 되어있든지간에.
ㅅㅅㅅ(175.252)2015-11-01 22:49
매개 변수랑 인자라는 개념도 다분히 하이레벨적 개념임. 실제로는 스택에 값을 푸시하고 참조할 뿐인데 그걸 마치 언어적으론 변수처럼 선언해서 주고 받고 있지. 그 가상의 변수를 '매개 변수'라고 하고 호출 시 그 변수에 넣어주는 값을 '인자'라고 할 뿐. 이건 논리적인 개념일 뿐 어셈 레벨로 가면 매개 변수라는 개념은 없지.
참조의 의한 호출도 결국엔 포인터의 값의 전달이야
참조에.의한 호출은 레퍼런스 같은데서 개념으로 만든거고
그냥 다른 언어도 까보먼 주소에 의한 호출에 값을 던진것뿐
하지만 객체를 넘기면 Call by reference지. obj = {param1: 10}; func (obj); alert (obj.param1); function func (o) { o.param1++; }
객체를 넘겨도 값으로 전달된다
자바스크립트는 함수가 오로지 매개변수로 복사된값만 받는다이기야!
시크 // 니 말은 기계어 레벨에서 볼 때의 이야기고. 하이레벨이면 하이레벨 수준에서 얘기해야지. C언어 포인터는 Call by value지만 C++의 레퍼런스 타입의 인자는 Call by reference임. 내부적으론 포인터 넘기는 걸로 구현되어있겠지만 표면적으론 그게 안 드러나니깐.
아둔 // 내가 준 코드 실행시켜 보기나 하고 말해.
객체를 전달받아서 객체의 값을 바꿀 수 있습니까? 없습니까?
거참... 자바스크립트는 복사된값만 받는다구요..
자바스크립트, 자바 등에서는 객체 변수는 객체 그 자체가 아니라 (즉, C의 구조체 변수랑 다르게) 객체를 가리키는 레퍼런스 (포인터에서 주소 개념만 없앤 논리적인 포인터랄까) 기 때문에, 함수에 인자로 객체를 넘기면 Call by value로 넘어가는데 그게 객체 그 자체가 값으로 가는 게 아니라 객체에 대한 참조가 카피되는 거임.
맞음 c++ 레퍼런스는 수정 불가 개념이지만 걍.인라인 어셈열어서 eax 같은거 써진 주소값 바꾸면 댐
유지보수 개빡치게 코딩하는법 ㅇ
즉, 객체 내부에 값을 담아 보냄으로써 Call by reference가 구현된다. 아직도 이해가 안됨? 그럼 노답이고 뭐.
레퍼런스는 언어적 개념이니까 구현하기 나름이라는 뜻
아랫단은 전부 값에 의한 호출이라는걸 말할뿐
시크 // 그렇게 치면 call by value라는 용어 자체를 만들 이유가 없지. 그런 용어를 만든 건 논리적인 구분을 하기 위함임. call by value, call by reference의 구분은 함수를 호출하는 코드에서 값을 직접 넘겨주고 있느냐, 그렇지 않고 참조를 넘겨주느냐로 구분. 어셈이 어떻게 되어있든지간에.
매개 변수랑 인자라는 개념도 다분히 하이레벨적 개념임. 실제로는 스택에 값을 푸시하고 참조할 뿐인데 그걸 마치 언어적으론 변수처럼 선언해서 주고 받고 있지. 그 가상의 변수를 '매개 변수'라고 하고 호출 시 그 변수에 넣어주는 값을 '인자'라고 할 뿐. 이건 논리적인 개념일 뿐 어셈 레벨로 가면 매개 변수라는 개념은 없지.
ㅋㅋ 그냥 해석의차이니까 아는척해볼려고 했다가 어그로 제대로 끌었냉 아이기뻐라
허참 노랭이 책에 다 써있을 텐데?