Coldfusion 是变量&;这是否考虑了CF2016中CFC内的隐式作用域?

Coldfusion 是变量&;这是否考虑了CF2016中CFC内的隐式作用域?,coldfusion,scope,cfml,coldfusion-2016,Coldfusion,Scope,Cfml,Coldfusion 2016,如何利用以下方面的性能优势: 。。。绕过在隐式范围中搜索变量,因此 更快地查找应用程序中定义的变量 我们是否应该在ColdFusion 2016中开始对变量和进行范围界定,该使用searchImplicitScopes=“false”在CFC内进行范围界定 我找不到任何关于CF2016中被视为隐式作用域的文档。我很确定局部和参数作用域在函数中是很好的,但是像变量和这个这样的常用作用域在CFC中又如何呢?作用域所有的东西 CFC内的变量作用域对于CFC内的所有函数都是全局的 CFC内的此作用域对C

如何利用以下方面的性能优势:

。。。绕过在隐式范围中搜索变量,因此 更快地查找应用程序中定义的变量

我们是否应该在ColdFusion 2016中开始对
变量
进行范围界定,该
使用
searchImplicitScopes=“false”
在CFC内进行范围界定


我找不到任何关于CF2016中被视为隐式作用域的文档。我很确定
局部
参数
作用域在函数中是很好的,但是像
变量
这个
这样的常用作用域在CFC中又如何呢?

作用域所有的东西

CFC内的
变量
作用域对于CFC内的所有函数都是全局的

CFC内的
作用域对CFC内的所有函数都是全局的,也可以从CFC的调用方引用

如果不在CFC内定义变量的范围,则默认为
变量
范围。

测试呼叫:

  • #test.foo#
  • #测试棒#
  • #test.narf#
  • #test.getNarf()#
  • foo
    variables
    范围内,您将得到一个错误:
    元素foo在测试中未定义。
  • bar
    这个
    范围内,因此您可以得到
    test.bar
    的输出
  • narf
    变量范围内,您将得到一个错误:
    元素narf在测试中未定义。
  • 获取
    narf
    值的唯一方法是让函数返回它
  • 更新

    searchImplicitScopes
    可以关闭CF的范围搜索功能。因此,如果不确定某个范围,它将不会查找范围的层次结构。问题是,默认情况下,未设置范围的变量是否会在
    变量
    范围内结束?我会说,是的,因为这是自CFCs上市以来的默认情况

    不管使用那个设置,我还是会说范围所有的事情。他们创建隐式
    local
    范围的全部原因是:

  • 开发人员不习惯
    var
    scoping函数局部变量
  • 开发人员倾向于使用
    var local=structNew()
    ,因此他们只需
    var
    定义一个变量
  • 2还使他们能够返回函数局部变量的集合
  • 从CF 9开始,当
    var a=0
    local.a=0
    相同时,您可以删除
    var local=structNew()
    的所有实例,只要您还“确定”了这些私有变量的范围并将其引用为
    local.a
  • 底线


    如果CF必须在每个请求上查找变量作用域,则会产生一些性能开销。如果您使用
    searchImplicitScopes=false
    关闭该查找,您应该会得到一些性能提升。但是,这实际上应该取决于您的应用程序和平均请求负载。

    刚刚安装了CF 2016 Express,我可以得出结论,使用
    searchImplicitScopes=“false”
    ,当变量没有作用域时,仍在搜索
    变量的作用域,但是不是
    这个
    范围。

    对不起,我没有看到你的答案是版本特定的。范围所有的东西?甚至
    本地
    参数
    ?抱歉,我只是重新表述了我的问题,以明确我的问题是,如何利用CF2016的
    searchImplicitScopes=false
    。Scope Everything的性能优势。即使是
    local
    arguments
    @AdrianJMoreno“我会说,是的”,你能确认一下吗?我还没有安装CF2016。当我明天发现答案时,我可能会发布我的答案。 <--- this_test.cfc ---> <cfcomponent> <cfset variables.foo = "This is my CFC global variable." /> <cfset this.bar = "This variable is global to my CFC and can be referenced externally." /> <cfset narf = "Global variable! Point!" /> <cffunction name="getNarf" access="public"> <cfreturn narf /> </cffunction> </cfcomponent> <cfset test = new this_test() />

    <cfoutput> <li>#test.foo#</li> <li>#test.bar#</li> <li>#test.narf#</li> <li>#test.getNarf()#</li> </cfoutput>