我是CF的新手,所以这可能是一个基本问题。但是我听说我应该在函数内部使用local作为CF中的作用域。但是'var'怎么样? var与使用local相同吗?
e.g。
function MyFunction()
{
local.obj = {};
}
这是否与:
相同function MyFunction()
{
var obj = {};
}
如果它们不一样,它们之间有什么区别?我什么时候应该使用其中任何一个?
答案 0 :(得分:5)
它们非常相似,但不完全相同。两者都只存在于函数内部,但它们的工作方式略有不同。
var
版本适用于所有默认变量范围。见http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec09af4-7fdf.html
Local只匹配本地范围内的变量。请考虑以下
<cffunction name="himom">
<cfoutput>
<p><b>try 0:</b> #request_method#</p>
<!--- you might think that the variable does not exist, but it does because it came from cgi scope --->
</cfoutput>
<cfquery name="myData" datasource="Scorecard3">
SELECT 'This is via query' AS request_method
</cfquery>
<!--- Data is now being loaded into a query --->
<cfoutput query="myData">
<p><b>try 1:</b> #request_method#</p>
</cfoutput>
<!--- This one now came from the query --->
<cfset var request_method = "This is Var">
<!--- We now declare via var --->
<cfoutput query="myData">
<p><b>try 2:</b> #request_method#</p>
</cfoutput>
<!--- the query version disappears and now the var version is takes presidence --->
<cfset local.request_method = "This is local">
<!--- now we declare via local --->
<cfoutput query="myData">
<p><b>try 3:</b> #request_method#</p>
</cfoutput>
<!--- The local method takes presidence --->
<cfoutput>
<p><b>try 4:</b> #request_method#</p>
<!--- in fact it even takes presidence over the var --->
<p><b>try 5:</b> #local.request_method#</p>
<!--- there is no question where this comes from --->
</cfoutput>
</cffunction>
<cfset himom()>
以上结果
尝试0:GET
尝试1:这是通过查询
尝试2:这是Var
尝试3:这是本地的
尝试4:这是本地的
尝试5:这是本地的
总结
在开发时,您可以使用其中一个来确保变量仅存在于函数内部,但始终使用local
为变量添加前缀可以确保您的代码清晰易懂
答案 1 :(得分:4)
在ColdFusion 9+中,在ColdFusion CFC中使用局部范围和var指令可以提供相同的结果。
Ben Forta在此解释: http://forta.com/blog/index.cfm/2009/6/21/The-New-ColdFusion-LOCAL-Scope
我建议使用本地。符号因为它更明确。