我正在清理一个大型网站的巨大变量范围,通常在清理这些内容时,我会发现变量和变量范围。
问题是;说我在视图中有一个函数声明(cfscript):
function myFunction(){
//doStuff
}
myFunction现在在变量范围内可用,但它仅在此页面上使用,因此我希望它在本地范围内。
我试过了:
function local.myFunction(){
//doStuff
}
//error!
var myFunction = "";
function myFunction(){
//doStuff
}
//just creates a local string and a global function...
var function myFunction(){
//doStuff
}
//no error but function is still not local...
然而,以下确实有效,但确实感觉有点讨厌......
function myTMPFunction(){
//doStuff
}
var myFunction = myTMPFunction;
structDelete(VARIABLES, "myTMPFunction");
有没有更好,干净的方式?
答案 0 :(得分:2)
有没有更好,干净的方式?
是的,有。它被称为ColdFusion components又名CFC。
我怀疑你错误地使用了本地范围概念,但是你没有说明你的代码是否在CFC中,所以我只能猜测:如果你在重构CFC,你想要的是封装,否则你只想在方法中开始使用组件和然后本地范围。
答案 1 :(得分:1)
根据您对Sergii帖子的评论,
用于递归生成HTML
我想说也许你应该将函数重构为自定义标记。
我通常避免直接从函数输出任何内容,而是使用自定义标签。当我使用函数时,我返回某个值(或无效)。
如果没有关于该功能的更多具体信息,那么很难给出比这更具体的答案。
然而,虽然不是最漂亮的,但我认为如果您不打算使用自定义标记,那么您的解决方案也会有效。
function myTMPFunction(){
//doStuff
}
var myFunction = myTMPFunction;
structDelete(VARIABLES, "myTMPFunction");
答案 2 :(得分:0)
本地范围仅在函数的上下文中非常重要。在cfc中使用var范围变量的原因是,应该是函数本地的变量不会从函数的范围泄漏到组件中。如果您在持久范围(如会话或应用程序)中拥有组件,这一点就变得尤为重要
component{
public void function leakyVariable(){
//this is in variables scope so a) it will exist longer
//than this function call and other functions can access it
foo = "Foo";
//do stuff
}
public void function grabLeakyVariable(){
//look i have a foo
var foobar = foo & "bar";
}
}