范围:本地与Var

jzm*_*jzm 6 coldfusion scope coldfusion-9

我是CF的新手,所以这可能是一个基本问题.但是我听说我应该在函数内部使用local作为CF中的作用域.但是'var'怎么样?var与使用本地相同吗?

例如

function MyFunction()
{
    local.obj = {};
}
Run Code Online (Sandbox Code Playgroud)

这是一样的:

function MyFunction()
{
    var obj = {};
}
Run Code Online (Sandbox Code Playgroud)

如果它们不一样,它们之间有什么区别?我什么时候应该使用它们中的任何一个?

BKK*_*BKK 5

在 ColdFusion 9+ 中,在 ColdFusion CFC 中使用局部作用域和 var 指令提供相同的结果。

Ben Forta 在这里解释:http : //forta.com/blog/index.cfm/2009/6/21/The-New-ColdFusion-LOCAL-Scope

我会建议使用本地。符号,因为它更明确。


Jam*_*ler 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()>
Run Code Online (Sandbox Code Playgroud)

结果如上

尝试0:GET

尝试1:这是通过查询

尝试2:这是Var

尝试3:这是本地的

尝试4:这是本地的

尝试5:这是本地的

综上所述

在开发时,您可以使用其中一个来确保变量仅存在于函数内部,但始终为变量添加前缀可以local确保您的代码能够被清楚地理解