我看到经常使用的三种符号,我想知道它们之间的区别是什么:
<cfset var foo = "bar" />
<cfset local.foo = "bar" />
<cfset variables.foo = "bar" />
<cfset arguments.foo = "bar" />
答案 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之外,我认为变量范围将在其创建的模板中是私有的。