【问题标题】:What are the pros and cons to explicitly scoping a variable inside a function? [closed]在函数内显式定义变量的优缺点是什么? [关闭]
【发布时间】:2015-07-17 14:06:37
【问题描述】:

我读到,在 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>

【问题讨论】:

  • 我应该烤巧克力蛋糕还是香草蛋糕。哪个最好?嗯...这不是一个意见网站。这是一个提出问题的网站,可以在不考虑意见的情况下回答。
  • @EvikJames 我读到的论点是,如果您明确地确定变量的范围,那么代码将更有效率,因为 CF 不需要搜索范围。因此,这个问题有一个不依赖于意见的技术答案。
  • “最佳实践”始终是一种意见。也许你应该改写这个问题,而是问哪个是“最快的”,或者哪个使用最少的处理,或者哪个......我不知道,还有其他一些标准。
  • 查看 Leigh 的评论:stackoverflow.com/a/31336993/480894
  • 始终范围。没有一个很好的理由不考虑范围。

标签: coldfusion coldfusion-9 cfml cfc


【解决方案1】:

随着本地作用域的引入,使用 var 关键字只是告诉 CF vared 的东西属于本地作用域。这两个例子都完成了同样的事情。

我建议不要将两者混用。

【讨论】:

  • 哎呀!谢谢你接听。
  • 但是明确提及范围不是更有效吗?
  • @Roland 有点像,但 localarguments 作用域是 CF 会首先寻找的作用域,所以这没什么大不了的。
  • @Roland - 忘掉效率吧。在大多数情况下,差异可以忽略不计。明确范围的原因是为了确保准确性和可读性。想象一下,您忘记了 var scope result 并且省略了“Local”。字首。函数变量会泄漏到变量范围内,从而可能导致一些讨厌的线程问题。范围明确地避免了这些类型的错误。在这种情况下,您可以跳过范围界定吗?是的。你应该?没有。
【解决方案2】:

(我所做的)是将 var 一个 LOCAL 变量作为结构来包含函数内部所需的所有变量,我已经修改了 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    • 2014-06-26
    • 2011-04-01
    • 2010-09-12
    相关资源
    最近更新 更多