coldfusion - 实体具有不正确的类型,可以作为函数调用

jpm*_*yob 1 coldfusion

我有一种情况,我正在重构一些代码 - 我在一个循环中分离了很多代码并将它放入一个组件中,每个活动都是一个方法,都被称为w/ia循环.

当它运行时 - 第二次通过循环,它无法解析a.id - 在行"var b = b(i,a.id);"

如果我在每一行都执行writeOutput(),我会在循环开始和每一行看到我的val,直到最后一次.

    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 );
        }
    }
Run Code Online (Sandbox Code Playgroud)

我也尝过这个 - 同样的问题

function bigOne() {
    var a = '';
    var b = '';

    for( var i=1; i<2; i++; ) {
        a = a( i );
        b = b( i, a.id );
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经读过这个Coldfusion,你提供的符号[method_name]不是一个函数 - 但它不是同一个东西,这篇文章是关于getter和setter ...我不认为这适用于我的问题.

如果我像这样输出我的输出('看'它':

function bigOne() {
    var loopcount = 1;
    for( var i=1; i<2; i++; ) {
        writeOutput( 'loop count = ' & loopcount );
        var a = a( i );
        writeoutput( 'a.id = ' & a.id );
        var b = b( i, a.id );
    }
}
Run Code Online (Sandbox Code Playgroud)

我明白了:

loop count = 1
a.id = 52978
loop count = 2 
Run Code Online (Sandbox Code Playgroud)

那么错误.错误MSG:实体具有不正确的类型,可以作为函数调用.您提供的符号insStop不是函数的名称.

Ada*_*ron 7

函数由引用指向,就像变量一样,所以当你这样做时:

a = a();
Run Code Online (Sandbox Code Playgroud)

您将覆盖指向函数的引用,a并使用从其返回的值.因此,下次您尝试调用时a(),aia不再是​​您的函数,它是上次调用时返回的值.

当你得到一个不能以你想要的方式使用它的变量的错误时...... 将它转储出来并查看它包含的内容.这通常会指出你正确的方向,你做错了什么.