鉴于以下内容:
wscript.echo "fx(0)=" & fx(0)
Function fx( v1 )
fx = 1 + 2
Wscript.echo "fx=" & fx
End Function
两条“echo”行都打印值3
。为什么函数内部的那个不会导致语法错误或递归循环?与以下示例相同的问题:
wscript.echo "fy()=" & fy()
wscript.echo "fy=" & fy
Function fy
fy = 1 + 2
Wscript.echo "fy=" & fy
End Function
所有回显线都打印3
。
当函数定义将其名称引用为RVALUE时,我找不到描述行为的文档。
TIA。
答案 0 :(得分:2)
在VBScript函数中,函数的名称是本地范围的变量,旨在等效于函数的返回值。它与任何其他Dim var = ...
没有什么不同。要将其视为一个函数,您需要使用调用语义。
基本上,您似乎习惯了具有一流功能的语言。 VBScript没有它们,所以没有歧义。
答案 1 :(得分:0)
除了Plynx之外,VBScript有点暧昧。这就是为什么你可以使用wscript.echo fy
以及wscript.echo fy()
来处理没有参数的函数。
但是,在使用functionname作为变量的函数内部,这不起作用。如果你这样做:
Function fy
fy = 1 + 2
Wscript.echo "fy=" & fy()
End Function
您将收到Out of stack space: 'fy'
错误。
将functionname用作函数实际上可能很有用,因为现在可以在构建递归函数时将functionname用作变量或函数调用。
为了便于阅读,我建议在函数调用中使用括号。它将使您或您的同事更容易进行审阅或调试。