代码之家  ›  专栏  ›  技术社区  ›  Roland

Coldfusion局部范围在函数之外?

  •  3
  • Roland  · 技术社区  · 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 关键字,如下所示:

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

    将产生以下输出:

    Image 2

    1 回复  |  直到 4 年前
        1
  •  8
  •   Anurag    9 年前

    这个 Local 作用域仅在函数内定义,不应在函数外使用。

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

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

    当你提到 local.madVar2 变量,该变量在您本质上引用的函数外部初始化 local.madVar2 变量 范围,即变量 madVar2 存储在名为的结构中 local 存储在 变量 范围

    因此,本质上,在适当的范围内,您的代码被视为:

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

    尝试转储 变量 将函数内的变量定义为:

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

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

    enter image description here