ColdFusion 10不会抛出任何错误,但ColdFusion 8会抛出任何错误

时间:2013-12-13 12:36:18

标签: coldfusion coldfusion-8 coldfusion-10

对不起,这是我能想到的最好的标题。

我希望有人在这里可以解释一下这种行为。我的雇主刚决定将CF 8升级到CF 10(是的,我知道)。但是,有些服务器在CF 10上,有些服务器在CF 8上。我知道它不应该是这样的;但这不在我的掌控之中。 无论如何,我有以下代码。它在CF 8中断,但在CF 10中无错误地工作。在CF 8中,它表示元素a没有在本地定义,这是预期的,我没有问题。毕竟,local声明了两次,而第二次声明没有定义。

但是在CF 10中,没有生成错误,函数返回了local.a。对我来说,CF 10应该抛出错误,因为CF 8失败的原因相同,或者因为“local”是CF 10中的保留字(CF 9中引入了“local”)。为什么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>

1 个答案:

答案 0 :(得分:6)

有些人无视任何理智的人会认为是常识,ColdFusion 9(以及相应的10)已被硬编码以忽略这一陈述:

local = structNew();

或者:

local = {};

这是为了提供&#34; backwards compat&#34;传统上在旧版本的CF中使用local作为伪本地范围的人。

Adob​​e故意这样做,信不信由你。

您可以通过在cflive.net上运行此代码来证明这一点:

function f(){
    var local = {};

    local.a = "set at top";

    local = {};

    writeDump(var=local);
}

f();

为了交叉兼容性,Railo,祝福他们在这里遵循ColdFusion的主导。

Adob​​e在这里做了一件非常愚蠢的事情,现在我们一直坚持下去。但那就是为什么你会看到你所看到的东西。