Coldfusion函数外的局部范围?

时间:2015-07-20 13:09:47

标签: coldfusion scope coldfusion-9

在函数之外定义的局部范围究竟是什么?

请考虑以下代码:

<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>

enter image description here

通过添加var关键字来更改madVar2分配,如下所示:

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

将产生此输出:

Image 2

1 个答案:

答案 0 :(得分:8)

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

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

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

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

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

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

在将函数内部的变量定义为:

之后,尝试转储variables范围
var madVar = "madness variable";
madVar2 = "madness two variable";
writeDump(variables);
.....

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

enter image description here