在ColdFusion中,UDF是否有一种从父函数范围引用变量的方法?

时间:2017-01-19 19:18:54

标签: scope coldfusion user-defined-functions

如果你有一个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>

2 个答案:

答案 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>