안녕하세요^^

매우 중요한 부분인데 설명이 언급되어있지 않으셔서 제가 무례함을 무릅쓰고 글을 남깁니다.^^

(적어도 제 기준에선 매우 중요한 부분입니다만.ㅎㅎ다른분들은???)

ByRef(참조에 의한 호출) - 함수에 전달된 매개변수가 함수안에서 변하게 되면 매개변수값 역시 변한다.

ByVal(값에 의한 호출) - 함수에 전달된 매개변수가 함수안에서 변하게 되더라고 매개변수값은 변하지 않는다.

기본속성은 ByRef입니다.

 

기본적인 정의는 이렇습니다.

다들 아시는 내용이거나 한번쯤은 스쳐보신분들도 있으시겠지요^^

테스트 예제는 아래와 같습니다.

<%

  SUB ForTest(ByVal x,ByRef y)
    FOR i=x TO 5 STEP + 1 : NEXT
    FOR j=y TO 5 STEP + 1 : NEXT
    Response.write "값에 의한 호출인 x의 값은 : "& x &"<BR>"
    Response.write "참조에 의한 호출인 y의 값은 : "& y &"<BR>"
  END SUB

  Dim i,j

  i=0:j=0

  Call ForTest(i,j)

  %>

결과는 x는 0이고 y는 6입니다.

하지만 위와 같은 상황에서 매개변수 호출타입을 지정해 주지 않으면

FOR문에서 전달되어진 값이 변하게 된다.

ForTest()함수에서 반복문후에 y의 값을 사용할려고 할때는 0이 아닌 6으로 사용된다.

이상황에서 사용자는 y의 값이 0으로 인식할 가능성이 큰 경우 이다.

이와 같은 상황은 비단 변수뿐만이 아니라 배열에서도 가능하다.

<%

  Dim Arr(0) : Arr(0) = "5"

  SUB ArrTest(SubArr)

    SubArr(0) = "1"

  END SUB

  Response.Write "함수를 호출하기전 Arr의 0번째 값 : "& Arr(0) &"<br>"

  Call ArrTest(Arr)

  Response.Write "함수를 호출한다름 Arr의 0번째 값 : "& Arr(0) &"<br>"

%>

배열도 마찬가지로 함수를 호출하기전 값은 "5"인데 함수호출된 다음의 값은 "1"로 변경되어 버린다.

위에서 설명한것과 같이 매개변수호출 타입의 기본속성은 ByRef(참조에 의한 호출) 이기 때문이다.

코딩을 할때 변수명을 동일하게 사용을 하지말거나 매개변수호출 타입의 속성을 항상 지정해주는

습관을 가져주는게 바람직할수 있겠다.

 

큰 지식은 아니었지만 나눠봅니다^^