因为你参数是传址类型 改变参数a 即改变带入时x变量的值 还有一个重点是y=x+f(x)中f(x)先执行所以x被改变后 才是 y=x+。。
区别就在于你前面的代码是没声明x就直接用,相当于x为Variant类型,Variant类型做为函数参数的时候,默认是按地址传值的,也就是说你在f(a)中对a的赋值会直接影响到原本的x,结果就是2+5,而后面是声明了int类型,这个默认是按值传递的。
为了避免这种情况,建议你在定义f的时候就直接写成Function f(ByVal a) As Integer,明确表明你是按值传递,这样你在f中对a的操作就不会再影响到原本传入的参数,同样无论你是否声明x,都会得到10+5