ARGUMENT范围不优先于ColdFusion中的VARIABLE范围?

时间:2014-07-21 08:30:42

标签: coldfusion scope coldfusion-10

根据CF documentation

  

ARGUMENT范围优先于VARIABLE范围

我尝试了这段代码。

<cfset fun(25)>
<cffunction name="fun">
  <cfargument name="roll" >
  <cfset roll = 60>
  <cfdump var="#roll#">
</cffunction>

我希望输出为25,但是60。我无法理解ARGUMENT范围的原因 是不是优先于VARIABLE范围?或者我错过了什么?

3 个答案:

答案 0 :(得分:7)

您刚刚将arguments.roll更新为60.如果您想要一个不会被同名参数覆盖的本地函数变量,请将其分配给local范围:

<cfset local.roll = 60>
<cfdump var="#roll#">  // 25, as arguments scope takes precedence
<cfdump var="#local.roll#"> // 60
<cfdump var="#arguments#">  // 25

答案 1 :(得分:5)

它正在正好您期望它做什么(并根据您链接到的文档)。

您未在roll中对<cfset>变量进行限定,因此参数范围优先于变量范围。就像你想要的那样。

IE:它解决了roll的无范围引用是arguments.roll,而不是variables.roll

答案 2 :(得分:0)

只需将roll值设置为variables.roll

即可
<cfset fun(25)>
<cffunction name="fun">
  <cfargument name="roll" >
  <cfset variables.roll = 60>
  <cfdump var="#roll#" /><cfabort />
</cffunction>

现在ARGUMENT范围优先于VARIABLE范围。