javascript 배열 파라미터는 call by reference



javascript 함수 맹글다가 오랜만에 재밌는거 발견.
(이제는 진짜 자바스크립트 책 정독한번 해야겠다.. ㅎ)

요새 코딩하면서 콜바이 밸류냐 레퍼런스냐에 대한 생각을 뜸하고 있었는데,
오늘 발견!! (그나마 이럴때 등록금이 조금 덜어까운듯 ㅋ)

c에서는 변수이름을 던지냐, 주소값을 던져서 call by value 인지 reference 인지 구분을 했다.
그런데 javascript 에서는 변수타입에 따라 정해진다. 태어날때부터 정해진거라는 생각이 드니 뭔가 씁쓸하긴 하다.

  - number, string, boolean 타입들은 call by value
  - array, object, date 타입들은 call by reference



var param = 1;
test(param);

function test(param){
    
    var tmp = param;
    console.log("before int tmp : " + tmp);
    
    tmp = tmp +1;
    
    console.log("after int tmp : " +tmp);
    console.log("after int param : " +param);
}

console.log("quit int param : " + param);
보통 이렇게하면 결과값은
1,2,1,1 의 순서가 나온다.

그런데 array 연산의 경우 조금 다르다
var params = [1,2,3]
testarr(params);

function testarr(params){
    var tmparr = params;
    
    console.log("before int tmparr : " + tmparr);
    
    tmparr[2]=1;
    
    console.log("after int tmparr : " + tmparr);
    console.log("after int params : " + params);
    
}

console.log("quit int params : " + params);
위의 결과값은
(1,2,3), (1,2,1), (1,2,1), (1,2,1) 의 순서로 출력된다.





예제 링크 : http://jsfiddle.net/8gHJJ/

댓글

이 블로그의 인기 게시물

[spring] log4j 설정 및 사용법

[linux] 백그라운드 작업 nohup [xxx.sh] &

[spring] 인터셉터 와 필터