Javascript全局上下文的变量对象与函数激活对象

标签 javascript function closures

下面是两个js代码示例:

A.函数 _foo 是在全局上下文中定义的

  function _foo(){ //some code here
  }

  //... some unrelated code here

  var foo = function(){
    var result = _foo();
    return result;
  }

B.函数 _foo 在函数上下文中定义

var foo = function(){
  function _foo(){ //some code here 
  }

  var result = _foo();
  return result;
};

在内存管理方面,哪一个是更好的编程实践?由于函数 foo 将在应用程序中被多次调用,因此最好将 _foo 保留在(应用程序的)全局上下文中,而不是在函数上下文中创建它每次调用 foo 时?或者由于 _foo 将(大部分)在 foo 内部使用,因此将其保留为激活对象的一部分有意义吗?

最佳答案

C:缓存

var foo = (function(){
  function _foo(){ //some code here 
  }
  return function() {
    var result = _foo();
    return result;
  }
}());

Foo 会立即执行,并且函数 _foo 仅声明一次。

在现代浏览器中,这比“全局”函数慢 5%。

相关Benchmark

关于Javascript全局上下文的变量对象与函数激活对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6382663/

相关文章:

iOS Swift : Closures (Callbacks) versus Delegates, 什么时候使用哪个?

javascript - 我需要它在同一个窗口而不是在新窗口中打开

javascript - 关于 JavaScript 软件分解结构指南

javascript - 带有选择类的语义 UI 多级下拉列表不会展开

JavaScript 性能问题

javascript - 外部函数调用不起作用

javascript - HTML/CSS/JavaScript 培训视频

javascript - 将字符串参数传递给 onclick javascript 函数

c# - 这种将异步方法转换为同步方法的方法是否正确?

javascript - KnockoutJs 的关闭问题