在LOC,VAR和VARIABLES范围中声明变量之间是否存在差异?

时间:2010-11-22 14:43:41

标签: coldfusion scope

我看到经常使用的三种符号,我想知道它们之间的区别是什么:

<cfset var foo = "bar" />
<cfset local.foo = "bar" />
<cfset variables.foo = "bar" />
<cfset arguments.foo = "bar" />

3 个答案:

答案 0 :(得分:13)

var local 是相同的范围,它们仅适用于声明它们的方法/函数。在使用var创建仅存在于方法中的变量之前,本地范围是CF 9的新增内容。

变量可用于声明它们的整个cfc或cfm页面以及任何包含的模板。

参数用于传递给方法/函数的参数,并且只存在于其中。

答案 1 :(得分:3)

如果您想知道为什么在local上使用var,例如CFC函数,那么请考虑以下两个例子:

<cffunction name="foo" returntype="query" output="false">

  <cfset var myQuery = "" />

  <cfquery name="myQuery">
    select * from bar
  </cfquery>

  <cfreturn myQuery />

</cffunction>

首先,您必须将变量声明为var,然后使用它。对比:

<cffunction name="foo" returntype="query" output="false">

  <cfquery name="local.myQuery">
    select * from bar
  </cfquery>

  <cfreturn local.myQuery />

</cffunction>

基本上它会删除循环变量和查询等所有这些var语句。少一行代码! :)

我希望有所帮助。

答案 2 :(得分:1)

首先,我认为你的意思是local范围,而不是loc(我不知道名为loc的范围)

<cfset var foo = "bar" />
<cfset local.foo = "bar" />

应该是完全一样的。该变量在其定义的函数中将是私有的。

CFC中的变量范围将在CFC实例中创建变量private(与函数相对)

在CFC之外,我认为变量范围将在其创建的模板中是私有的。