4

在对象文字中,在函数参数中使用 CF 的本地范围时,我看到了一些奇怪的行为。但只有在循环内执行时...

示例代码:

<cffunction name="f">
    <cfoutput>
        <cfset LOCAL.foo = 123 />       

        <!--- Works fine --->
        #serializeJSON({blah = LOCAL.foo})#

        <!--- Works fine --->
        <cfloop from=1 to=1 index="i">
            <cfset bar = {blah = LOCAL.foo} />
            #serializeJSON(bar)#
        </cfloop>

        <!--- Element FOO is undefined in LOCAL --->
        <cfloop from=1 to=1 index="i">  
            #serializeJSON({blah = LOCAL.foo})#
        </cfloop>
    </cfoutput>
</cffunction>


<cfset f() />

PS:serializeJSON()仅用于示例目的。这发生在我测试过的任何一个参数是结构的函数中。

4

2 回答 2

2

在 Railo 中工作得很好。

如果使用任何其他容器而不是作用域,它也没有任何区别local,也不可能用cftry.

如果您仅在循环内序列化本地范围:

<cfloop from=1 to=1 index="i">
    #serializeJSON(local)#
</cfloop>

结果是:

{"ARGUMENTS":{},"___IMPLICITARRYSTRUCTVAR1":{"BLAH":123},"___IMPLICITARRYSTRUCTVAR0":{"BLAH":123},"FOO":123} 

看起来像一个错误。介意备案

于 2012-06-25T14:58:36.610 回答
1

LOCAL是仅在函数中使用的范围。如果您尝试在LOCAL函数之外创建范围变量,它将失败。

我会写一个测试并在一分钟内向你证明......

更新实际上,我有 CF 8 在工作,无法测试它。

在 CF8 及以下版本中,您可以设置LOCAL.Foo,但它并不是真正的 CF 范围。

在 CF9 及以上版本中,LOCAL只能在一个函数内设置。

<cffunction>
   <cfset LOCAL.foo = 1>
   <cfreturn LOCAL.foo>
</cffunction>
于 2012-06-25T14:27:28.087 回答