Coldfusion 在函数中明确限定变量范围的利弊是什么?

Coldfusion 在函数中明确限定变量范围的利弊是什么?,coldfusion,coldfusion-9,cfml,cfc,Coldfusion,Coldfusion 9,Cfml,Cfc,我读到,在CF中,您应该始终确定变量的作用域,因为如果您不提供显式的作用域,CF将不得不搜索各个作用域,直到找到变量为止。真的是这样吗?如果是这样,test2()将是编写函数的更有效的方法 <cfscript> function test() { var result = 5; result = 42; return result; } function test2() { var resu

我读到,在CF中,您应该始终确定变量的作用域,因为如果您不提供显式的作用域,CF将不得不搜索各个作用域,直到找到变量为止。真的是这样吗?如果是这样,
test2()
将是编写函数的更有效的方法

<cfscript>
    function test() {
        var result = 5;
        result = 42;
        return result;  
    }

    function test2() {
        var result = 5;
        Local.result = 42;
        return Local.result;    
    }
</cfscript>

功能测试(){
var结果=5;
结果=42;
返回结果;
}
函数test2(){
var结果=5;
局部结果=42;
返回本地结果;
}
(我所做的)是将var作为一个局部变量作为一个结构来包含函数中所需的所有变量,我修改了test2()以显示这一点。我们这样做是为了确保与CF8的向后兼容性。因为我们仍然处理CF8和CF9服务器

<cfscript>
    function test() {
        var result = 5;
        result = 42;
        return result;  
    }

    function test2() {
        var local = {};
        local.otherthing = 'hello';
        local.result = 5;

        Local.result = 42;
        return Local.result;    
    }
</cfscript>

功能测试(){
var结果=5;
结果=42;
返回结果;
}
函数test2(){
var local={};
local.otherthing='hello';
局部结果=5;
局部结果=42;
返回本地结果;
}
(我所做的)是将var作为一个局部变量作为一个结构来包含函数中所需的所有变量,我修改了test2()以显示这一点。我们这样做是为了确保与CF8的向后兼容性。因为我们仍然处理CF8和CF9服务器

<cfscript>
    function test() {
        var result = 5;
        result = 42;
        return result;  
    }

    function test2() {
        var local = {};
        local.otherthing = 'hello';
        local.result = 5;

        Local.result = 42;
        return Local.result;    
    }
</cfscript>

功能测试(){
var结果=5;
结果=42;
返回结果;
}
函数test2(){
var local={};
local.otherthing='hello';
局部结果=5;
局部结果=42;
返回本地结果;
}

随着局部范围的引入,使用var关键字只会告诉CF to变量内容属于局部范围。这两个例子完成了相同的事情


我建议不要把两者混用

随着局部范围的引入,使用var关键字只会告诉CF to变量内容属于局部范围。这两个例子完成了相同的事情


我建议不要把两者混用

我应该烤巧克力蛋糕还是香草蛋糕。哪一个最好?嗯。。。这不是一个意见网站。这是一个提问的网站,可以在不考虑意见的情况下回答。@EvikJames我读到的论点是,如果显式地限定变量的范围,代码将更有效,因为CF不需要搜索范围。因此,这个问题有一个不依赖于意见的技术答案。“最佳实践”永远是一种意见。也许你应该改写这个问题,改为问哪一个是“最快的”,或者哪一个使用最少的处理,或者哪一个。。。我不知道,还有其他一些标准。请看Leigh的评论:总是范围。没有什么理由不去做。我应该烤巧克力蛋糕还是香草蛋糕。哪一个最好?嗯。。。这不是一个意见网站。这是一个提问的网站,可以在不考虑意见的情况下回答。@EvikJames我读到的论点是,如果显式地限定变量的范围,代码将更有效,因为CF不需要搜索范围。因此,这个问题有一个不依赖于意见的技术答案。“最佳实践”永远是一种意见。也许你应该改写这个问题,改为问哪一个是“最快的”,或者哪一个使用最少的处理,或者哪一个。。。我不知道,还有其他一些标准。请看Leigh的评论:总是范围。没有什么好的理由不考虑范围!谢谢您的关注。但是明确提到范围不是更有效吗?@Roland有点像,但是
local
arguments
scope是CF将要寻找的第一个范围,所以这不是什么大问题。@Roland-忘记效率吧。在大多数情况下,差异可以忽略不计。明确确定范围的原因是为了确保准确性和可读性。假设您忘记了var scope
result
,并且省略了“Local.”前缀。函数变量会泄漏到变量范围中,从而产生一些严重的线程问题。范围明确地避免了这些类型的错误。在这种情况下,你能跳过范围吗?对你应该吗?不。@Leigh来自CF文档ooops!谢谢您的关注。但是明确提到范围不是更有效吗?@Roland有点像,但是
local
arguments
scope是CF将要寻找的第一个范围,所以这不是什么大问题。@Roland-忘记效率吧。在大多数情况下,差异可以忽略不计。明确确定范围的原因是为了确保准确性和可读性。假设您忘记了var scope
result
,并且省略了“Local.”前缀。函数变量会泄漏到变量范围中,从而产生一些严重的线程问题。范围明确地避免了这些类型的错误。在这种情况下,你能跳过范围吗?对你应该吗?CF文档中的编号@Leigh