【发布时间】:2013-12-13 12:36:18
【问题描述】:
对不起,这是我能想到的最好的标题。
我希望这里有人能给我解释一下这种行为。我的雇主刚刚决定将 CF 8 升级到 CF 10(是的,我知道)。但是,有些服务器在 CF 10 上,有些在 CF 8 上。我知道它不应该是这样的;但这不在我的控制范围内。 无论如何,我有以下代码。它在 CF 8 中中断,但在 CF 10 中可以正常工作。在 CF 8 中,据说元素 a 没有在本地定义,这是意料之中的,我对此没有问题。毕竟,local 被声明了两次,而第二次没有定义 a。
但在 CF 10 中,不会生成错误,并且函数会返回 local.a。对我来说,CF 10 应该抛出错误,原因与 CF 8 失败的原因相同,或者因为“local”是 CF 10 中的保留字(“local”是在 CF 9 中引入的)。为什么 CF 10 没有报错?
<cfcomponent name="myComponent">
<cffunction name="myFunction" returntype="Numeric">
<cfscript>
var local = StructNew();
local.a = 1;
</cfscript>
<cfset local = StructNew()>
<cfif local.a is 0>
<!--- do something --->
</cfif>
<cfreturn local.a>
</cffunction>
</cfcomponent>
【问题讨论】:
-
我同意 CF 10 应该抛出一个错误,但我认为它应该抛出一个不同的错误。我认为它会在正在创建的变量上引发错误。 ColdFusion 9 引入了
local范围,我认为实际上正在创建一个名为“local”的变量,但是,当您尝试设置local.a时,它被设置在local范围而不是名为local的变量。所以local.a确实存在,但它在local范围内,而不是名为local的变量中。有意义吗? -
另请注意,第二次设置
local时没有var,因此该变量不会是函数的本地变量。 -
据我了解,一旦你对一个变量进行了一次 var'd,无论它改变多少次它的值,它都是函数的局部变量。
标签: coldfusion coldfusion-8 coldfusion-10