以下两个代码块在逻辑上是否相同?

时间:2010-12-15 15:07:51

标签: coldfusion scope cfloop

以下两个块之间是否存在逻辑差异?还有一种形式比另一种更正确吗?它们都存在于自己的功能中 - 这里我省略了。

    <cfset local.result = 1 />
    <cfset local.i = 1 />
    <cfloop from="1" to="5" index="i">
        <cfset result = result * i />
    </cfloop>

    <cfset local.result = 1 />
    <cfset local.i = 1 />
    <cfloop from="1" to="5" index="i">
        <cfset local.result = local.result * local.i />
    </cfloop>

2 个答案:

答案 0 :(得分:7)

是。在你的第二个例子中,你得到完全相同的结果;但是,通过明确标识要修改的范围,您已经提高了可读性 - 这是一件好事。

ColdFusion,会首先搜索LOCAL范围,所以,你还没有保存过多的ColdFusion处理;但是,代码现在更清洁了。如果结果存在于CLIENT或COOKIE范围内,那么您将为ColdFusion保存必须首先评估四个或五个其他范围的工作。

我曾经习惯使用'var result = 0;'将变量本地化到函数的样式,但是,我现在明确地标识了我的所有范围,以帮助确保我正确地确定了所有变量的范围并使代码更易于理解。

总而言之,代码与机器完全相同,但现在人们更容易理解。

答案 1 :(得分:2)

一个建议......改变:

<cfset local.i = 1 />
<cfloop from="1" to="5" index="i">

<cfloop from="1" to="5" index="local.i">

少了一行代码,更清楚发生了什么。