函数之外的 Coldfusion 本地范围?

Coldfusion local scope outside of a function?

函数外部定义的局部作用域到底是什么?

考虑以下代码:

<cfscript>

    local.madVar2 = "Local scope variable";

    function madness() {
        var madVar = "madness variable";
        madVar2 = "madness two variable";

        writeOutput("local: <BR>");
        writeDump(local);
        writeOutput("========================================= <BR>");

        writeOutput("local.madVar2: <BR>");     
        writeDump(local.madVar2);
        writeOutput("<BR>========================================= <BR>");

        writeOutput("madVar2: <BR>");       
        writeDump(madVar2);
        writeOutput("<BR>========================================= <BR>");

        writeOutput("variables.madVar2: <BR>");     
        writeDump(variables.madVar2);
        writeOutput("<BR>========================================= <BR>");
    }

</cfscript>

通过添加 var 关键字更改 madVar2 赋值,如下所示:

function madness() {
    var madVar = "madness variable";
    var madVar2 = "madness two variable";

将产生此输出:

Local 范围仅在函数内定义,不应在函数外使用。

在函数外定义的变量,默认在variables范围内。

//that way
myVar = 0;
//will be the same as
variables.myVar = 0;

当您引用 local.madVar2 变量时,它是在函数外部初始化的,您实际上是指 variables 范围内的 local.madVar2,即变量 madVar2存储在名为 local 的结构中,该结构存储在 variables 范围内。

所以基本上,在适当的范围内,您的代码被视为:

writeOutput("variables.local.madVar2: <BR>");     
writeDump(variables.local.madVar2);

尝试在将函数内的变量定义为之后转储 variables 作用域:

var madVar = "madness variable";
madVar2 = "madness two variable";
writeDump(variables);
.....

您将看到变量如何落入范围。