如果您有一个UDF在其中调用另一个UDF的情况,那么是否可以引用父程序的本地作用域而不将其作为参数传递?我的直觉告诉我,这是不可能的,因为函数的局部范围是,假定是由设计隔离的。
例如:
<cffunction name="function01">
<cfset var fruit = "apple" />
<cfset function02() />
</cffunction>
<cffunction name="function02">
<cfdump var="#fruit#" /> <!--- can I reference fruit? --->
</cffunction>我知道如何让function02访问父UDF的本地作用域变量的唯一方法是将它作为参数传递。当然,您也可以使用请求、表单、URL、会话和应用程序作用域。
<cffunction name="function01">
<cfset var fruit = "apple" />
<cfset function02(fruit) />
</cffunction>
<cffunction name="function02">
<cfargument name="fruit" />
<cfdump var="#fruit#" />
</cffunction>发布于 2017-01-20 18:58:50
根据每个人的注释,正确的答案是您不能从子函数引用局部变量。传递引用的唯一方法是将变量作为参数传递给子函数,或者将变量存储在不同的作用域(例如变量、表单、URL、请求、会话、应用程序、服务器等)。
首选的方法是将变量作为参数传递给子函数:
<cffunction name="function01">
<cfset var fruit = "apple" />
<cfset function02(fruit) />
</cffunction>
<cffunction name="function02">
<cfargument name="fruit" />
<cfdump var="#fruit#" />
</cffunction>发布于 2017-01-20 16:31:55
通过在fruit前面声明var,它只对本地作用域可用(在函数中)。
尝试:
<cffunction name="function01">
<cfset fruit = "apple" />
<cfset function02() />
</cffunction>
<cffunction name="function02">
<cfdump var="#fruit#" /> <!--- can I reference fruit? --->
</cffunction>这可能有效,但这不是处理这个问题的“干净”方法,最好用参数来处理
https://stackoverflow.com/questions/41749954
复制相似问题