如果你有一个UDF在其中调用另一个UDF的情况,是否可以引用父的本地范围而不将其作为参数传递?我的直觉告诉我,这是不可能的,因为函数的局部范围假设被设计隔离。
例如:
<cffunction name="function01">
<cfset var fruit = "apple" />
<cfset function02() />
</cffunction>
<cffunction name="function02">
<cfdump var="#fruit#" /> <!--- can I reference fruit? --->
</cffunction>
我知道如何赋予parentO访问父UDF本地范围变量的唯一方法是将其作为参数传递。当然,您也可以使用REQUEST,FORM,URL,SESSION和APPLICATION范围。
<cffunction name="function01">
<cfset var fruit = "apple" />
<cfset function02(fruit) />
</cffunction>
<cffunction name="function02">
<cfargument name="fruit" />
<cfdump var="#fruit#" />
</cffunction>
答案 0 :(得分:1)
通过在fruit
前面声明var
,它只能用于本地范围(在函数内)。
尝试:
<cffunction name="function01">
<cfset fruit = "apple" />
<cfset function02() />
</cffunction>
<cffunction name="function02">
<cfdump var="#fruit#" /> <!--- can I reference fruit? --->
</cffunction>
这可能会奏效,但不是&#34;清洁&#34;处理这个问题的方法,更好地使用参数
答案 1 :(得分:0)
基于每个人的评论,正确的答案是您不能从子函数引用本地范围的变量。传递引用的唯一方法是将变量作为参数传递给子函数,或者将变量存储在不同的范围内(例如VARIABLES,FORM,URL,REQUEST,SESSION,APPLICATION,SERVER等)。 ..)
首选方法是将变量作为参数传递给子函数:
<cffunction name="function01">
<cfset var fruit = "apple" />
<cfset function02(fruit) />
</cffunction>
<cffunction name="function02">
<cfargument name="fruit" />
<cfdump var="#fruit#" />
</cffunction>