var adun = {
age : 24
};
console.log(adun); // -> Object {age: 24}
function dc (value) {
value = {
'sibal' : '자바스크립트는 복사된 값만 받는다고'
};
}
dc(adun);
console.log(adun); // -> Object {age: 24}
age : 24
};
console.log(adun); // -> Object {age: 24}
function dc (value) {
value = {
'sibal' : '자바스크립트는 복사된 값만 받는다고'
};
}
dc(adun);
console.log(adun); // -> Object {age: 24}
무슨말인지 이해가 안가시는분들을 위해 직접만든 자료 첨부합니다.
자 이제 자바스크립트 함수는 매개변수가 오로지 값으로만 전달된다는걸 알았습니다.
근데 그 값이 객체 그 자체가 아니라 객체의 주소 즉 포인터인겁니다.
근데 포인터값을 넘기면 콜바이레퍼런스라고 하나보죠?
야후의 수석개발자이자 자바스크립트 관련하여 각종 유명한 책의 저자인 니콜라스 자카스는
객체 그 자체를 넘기는걸 콜바이레퍼런스라고 하던데요..
뭐 로마에서는 로마의법을 따라야하지 않겠습니까???
아 다시보니 제가 하나틀렸네요 adun변수가 복사되는게아니라 adun변수의 값이 복사됩니다
그런데 아둔님아, 님처럼 생각하면 Call by reference라는 게 존재하나요?
솔직히 만들 필요없는 용어가 만들어진 것 같다고는 생각함.. 많은 사람 헷갈리게 하고, 이해하게 만들고 (이해는 했지만 무쓸모 아닌가..), 이정도는 원리만 풀어써도 되고 용어까지 만들 필요는 없긴할 거 같은데...
ㄴ 아니슈발 내말은 c언어같은 경우는 *붙은 포인터 자체를 넘기면 함수에서 그대로 받아쓰는데(이게 콜바이레퍼런스) 자바스크립트는 변수가 값으로 포인터를 물고있고 함수로 변수를 넘기면 변수자체는 복사되는데 그 복사된 변수가 값으로 포인터를 물고있기때문에 변수자체가 포인터가아니므로(즉 참조가 아니므로) 변수의 값을 바꾸면 참조된 객체의 값이 안바뀐다 이거야
value.age = 30 하면 바뀌는데 이건 변수의 값 자체를 바꾼게아니라 변수의 값의 참조를 통해 접근한 이야기고 ㅇㅋ?
C언어도 포인터변수에 * 붙여서 참조로 접근하고, 그냥 바꾸면 값이 안 바뀌는 거 똑같은데?
그냐? 내가 c를 잘몰라서.. 잘모르고 냅다 씨부렸다
하지만 니콜라스 자카스형님은 자바스크립트에 콜바이레퍼런스가 없다고 하였다. 꼬우면 니콜라스 자카스형님에게가서따져라 나같은 php 1달차 신입에게 묻지말고
어쨌든 이건 부먹 찍먹 같은 얘기라고 생각함.. 실용적이지 못한 논쟁이야.. 쓰는 사람 이해를 돕고자 만들어졌을 용어가 쓰는 사람들을 헷갈리게 만들고 갈라지게 만들다니 안 될 일이야..
자바는 너무 어렵네여
아.. C언어에서는 &ptr; 하는 식으로 포인터변수의 주소를 전달한다면 그런 일도 일어날 수 있겠다..