ARGUMENT范围优先于VARIABLE范围
我尝试了这段代码。
<cfset fun(25)>
<cffunction name="fun">
<cfargument name="roll" >
<cfset roll = 60>
<cfdump var="#roll#">
</cffunction>
我希望输出为25
,但是60
。我无法理解ARGUMENT范围的原因
是不是优先于VARIABLE范围?或者我错过了什么?
答案 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范围。