SC函数递归调用和ByVal引用
(创建时间:2009年09月18日 18:03:00)
Jangogo : 
SC语言和VB语言一样,默认情况下,所有的函数的参数都是ByRef的。
当函数递归调用自己,或者调用的函数里面 如果对参数的值进行了改变,由于是ByRef 的,原来的变量的值就会改变。
例如:
 
 
  1. function  test(i)      
  2.   i=i-1      
  3.   test=i      
  4. end function      
  5.      
  6. L=10      
  7. msgbox test(L)  '结果为9      
  8. msgbox test(L)  '结果为8,因为L在上次执行的时候已经变改变了值   

在我们的具体应用中,笔者就吃过亏,在会计模块的报表功能的report.sc.asp中的GetRptData()函数中
某些参数在函数体内被改变了值,如prj参数,函数在递归调用自己的时候,再一次传入的参数已经不是原来的值了。
解决的方法是全部把参数改成 ByVal ,也就是 “按值传递”,问题就解决了。
 
  1. function GetRptData(ByVal DT,ByVal y,ByVal d1,ByVal d2,ByVal ac,ByVal isQty,ByVal isFCur,ByVal company,ByVal deptstaff,ByVal prj,ByVal po,ByVal goods,ByVal storage,ByVal fcur,ByVal cnstr)   
  2.   
  3. '......   
  4.   
  5. end function  
 
  1. function  test( ByVal i)         
  2.   i=i-1         
  3.   test=i         
  4. end function         
  5.         
  6. L=10         
  7. msgbox test(L)  '结果为9         
  8. msgbox test(L)  '结果仍然为9,因为L值没有改变  

文档中心