javascript 闭包和函数放置

标签 javascript performance coding-style structure closures

函数的放置是否会影响作用域内闭包的性能?如果是这样,放置这些功能的最佳位置在哪里?如果不是,闭包隐含的关联是否有足够的理由在逻辑上将函数放在另一个地方?

例如,如果 foo 不依赖于 localState 的值,那么 localState 是否可以从 foo 访问foo 的执行时间、内存使用等有影响吗?

(function(){
    var localState;

    function foo(){
        // code
    }

    function bar(){
        // code
        return localState;
    }
})();

换句话说,这是更好的选择吗?如果是,为什么?

(function(){
    function foo(){
        // code
    }

    var localState;

    function bar(){
        // code
        return localState;
    }
})();

Darius Bacon已建议below上面的两个示例是相同的,因为可以从 block 内的任何位置访问 localState。但是,下面的示例中 foo 定义在 block 外可能是不同的情况。你怎么看?

function foo(){
    // code
}

(function(){

    var localState;

    function bar(){
        // code
        foo();
        return localState;
    }
})();

最佳答案

这两个片段是等效的,因为它们都是在您正在创建的匿名函数的(相同)环境中定义的。我认为您可以通过任何一种方式从 foo 访问 localState

话虽这么说...如果您在创建的环境中有大量的变量,那么 foo 的执行时间可能会受到影响,因为变量查找可能需要更长的时间。如果在定义 foo 的函数中不再使用大量变量,并且 foo 也不需要它们,那么 foo 将导致它们不被垃圾收集,因此这也可能是一个问题。

关于javascript 闭包和函数放置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/243894/

相关文章:

internet-explorer - 如何使用 DOCTYPE XHTML 在 IE8 中删除 3D 边框?

javascript - 对 JavaScript 继承/原型(prototype)感到困惑

javascript - 使用 OpenStreetMap API 获取城市名称来调出 map

javascript - 分析性能敏感的代码路径

python - 有效地将自定义函数应用于 Pandas 中的组

android - performTraversals 递归的原因,egl 缓冲区交换时间长

javascript - 为什么连接空字符比 .toString() 更快?

c++ - 每个类都应该有自己的命名空间吗?

javascript - 如何在我的 js 代码中使用简写 if else 语句

c - 何时(不)将嵌套数据结构的一部分存储到临时变量中——漂亮/丑陋,更快/更慢?