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

use*_*540 2 coldfusion scope coldfusion-10

根据CF文档:

ARGUMENT范围优先于VARIABLE范围

我试过这段代码.

<cfset fun(25)>
<cffunction name="fun">
  <cfargument name="roll" >
  <cfset roll = 60>
  <cfdump var="#roll#">
</cffunction>
Run Code Online (Sandbox Code Playgroud)

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

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

  • 那是因为你现在正在创建一个与参数同名的变量; CF无法处理,这就是为什么你必须使用`local`范围(或将它分配到一个结构中:`<cfset var myVars.roll = 60>` (2认同)

Ada*_*ron 5

它正在完成您期望它做的事情(并根据您链接到的文档).

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

IE浏览器:它是解决无范围参照rollarguments.roll,没有variables.roll.