在函数参数中,在对象文字中使用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()
仅用于举例。这是在我测试的任何函数中发生的,其中一个参数是结构。
答案 0 :(得分:2)
在Railo中工作得很好。
如果使用任何其他容器而不是local
范围,它也没有任何区别,也不可能用cftry
来识别它。
如果在循环中仅序列化本地范围:
<cfloop from=1 to=1 index="i">
#serializeJSON(local)#
</cfloop>
结果是:
{"ARGUMENTS":{},"___IMPLICITARRYSTRUCTVAR1":{"BLAH":123},"___IMPLICITARRYSTRUCTVAR0":{"BLAH":123},"FOO":123}
看起来像个错误。记住filing?
答案 1 :(得分:1)
LOCAL
是仅在函数中使用的范围。如果您尝试在函数之外创建LOCAL
范围变量,它将失败。
我会写一个测试并在一分钟内向你证明......
更新实际上,我有CF 8在工作,无法测试。
在CF8及以下版本中,您可以设置LOCAL.Foo
,但它并不是CF范围。
在CF9及以上版本中,LOCAL
只能在函数中设置。
<cffunction>
<cfset LOCAL.foo = 1>
<cfreturn LOCAL.foo>
</cffunction>