coldfusion-实体作为函数调用的类型不正确
我有一种情况,我正在重构一些代码——我在一个循环中分离出许多代码并将其放入一个组件中,每个活动都是一个方法,都称为w/I循环 当它第二次通过循环运行时,它在“varb=b(i,a.id);”行解析a.id失败 如果我在每一行执行writeOutput(),我会在循环的开始和每一行看到VAL,直到最后一次coldfusion-实体作为函数调用的类型不正确,coldfusion,Coldfusion,我有一种情况,我正在重构一些代码——我在一个循环中分离出许多代码并将其放入一个组件中,每个活动都是一个方法,都称为w/I循环 当它第二次通过循环运行时,它在“varb=b(i,a.id);”行解析a.id失败 如果我在每一行执行writeOutput(),我会在循环的开始和每一行看到VAL,直到最后一次 function a() { //do thing return id; } function b() { //do t
function a() {
//do thing
return id;
}
function b() {
//do thing
return id;
}
function bigOne() {
for( var i=1; i<2; i++; ) {
var a = a( i );
var b = b( i, a.id );
}
}
然后是错误。错误消息:实体作为函数调用的类型不正确。
在STOP中提供的符号不是函数名 函数通过引用指向,就像变量一样,因此当您执行此操作时:
a = a();
您正在用函数返回的值覆盖指向函数a
的引用。因此,下次尝试调用a()
,a
ia不再是您的函数时,它是上次调用它时返回的值
当您在变量行中遇到错误时,无法按您希望的方式使用它。。。把它倒出来,看看里面有什么。这通常会为您指出错误所在的正确方向。函数由引用指向,就像变量一样,因此当您执行此操作时:
a = a();
您正在用函数返回的值覆盖指向函数a
的引用。因此,下次尝试调用a()
,a
ia不再是您的函数时,它是上次调用它时返回的值
当您在变量行中遇到错误时,无法按您希望的方式使用它。。。把它倒出来,看看里面有什么。这通常会为您指出错误所在的正确方向。为了支持Adam的说法,您可以通过在函数中确定变量的范围来避免这种情况。默认情况下,未作用域的变量放在“variables”范围内,这适用于在同一模板内调用的函数。因此,您不必将函数var命名为“loopcount”,而是可以将其范围限定为“local”范围,即
var local.loopcount = 1
这将使函数var只属于函数,因此不受函数外部发生的任何事情的影响,反之亦然 为了支持Adam所说的,您可以通过在函数中确定变量的范围来避免这种情况。默认情况下,未作用域的变量放在“variables”范围内,这适用于在同一模板内调用的函数。因此,您不必将函数var命名为“loopcount”,而是可以将其范围限定为“local”范围,即
var local.loopcount = 1
这将使函数var只属于函数,因此不受函数外部发生的任何事情的影响,反之亦然 由于
local
在CF9+中是一个完整的系统作用域,因此最好使用var
或local
-而不是两者都使用。由于local
在CF9+中是一个完整的系统作用域,因此最好使用var
或local
-而不是两者都使用。
var local.loopcount = 1