函数外部的Coldfusion局部作用域?

函数外部的Coldfusion局部作用域?,coldfusion,scope,coldfusion-9,Coldfusion,Scope,Coldfusion 9,函数外部定义的局部作用域究竟是什么 考虑以下代码: <cfscript> local.madVar2 = "Local scope variable"; function madness() { var madVar = "madness variable"; madVar2 = "madness two variable"; writeOutput("local: <BR>"); wr

函数外部定义的局部作用域究竟是什么

考虑以下代码:

<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>
将产生以下输出:


本地范围仅在函数内定义,不应在函数外使用

函数外部定义的变量,默认为
变量
范围

//that way
myVar = 0;
//will be the same as
variables.myVar = 0;
当您引用在函数外部初始化的
local.madVar2
变量时,实际上是指
variables
范围内的
local.madVar2
,即变量
madVar2
存储在名为
local
的结构中,该结构存储在
variables
范围内

//that way
myVar = 0;
//will be the same as
variables.myVar = 0;
因此,基本上,在适当的范围内,您的代码被视为:

writeOutput("variables.local.madVar2: <BR>");     
writeDump(variables.local.madVar2);
您将看到变量是如何进入作用域的


我不想费心费力地浏览你的迟钝的repo case(提示:即使在repo case中,也要使用有意义的变量名。特别是在repo case中,因为你想让其他人阅读),但是函数外没有
local
作用域,所以当你设置
local.madVar2
,实际上,您正在设置
变量.local.madVar2
。你所看到的能证明这一点吗?想做一个更清晰的复制吗?ColdFusion是一种将(.)点符号中的变量自动隐式赋值给结构的方法。
var madVar = "madness variable";
madVar2 = "madness two variable";
writeDump(variables);
.....