什么时候在javascript中嵌套函数?

时间:2013-06-15 12:08:45

标签: javascript nested-function global-scope

如果我不担心污染全局范围,并且函数b()被调用的唯一地方是函数a(),那么以下哪个是性能方面更好的解决方案?

var v;
function a()
{
    function b()
    {
        v*=v;
    }
    v=5;
    b();
}
a();

var v;
function a()
{
    v=5;
    b();
}
function b()
{
    v*=v;
}
a();

2 个答案:

答案 0 :(得分:2)

当您使用符号时,会在环境链中查找其关联值,从内部开始并向外移动。这意味着首先找到内部(本地)环境而不是全局环境,但性能没有实际差异。

选择采用哪种解决方案只需问问自己:

  • 内部函数可能对将来的其他函数有用吗?

如果没有,

  • 我可以通过创建一个在其他地方有用的更通用功能的方式来抽象内部函数吗?

答案 1 :(得分:0)

三年后回顾我的问题,我希望提供一个更令人满意的答案。

如果内部功能将在别处使用,请不要嵌套。原因很明显。

function a(){
  // ...
}
function b(){
  // ...
  a();
}

a();
b();

如果内部函数不会在别处使用,请将其嵌套。它看起来更干净,并且增加了外部函数的逻辑完整性(相关内容在视觉上是封闭的)。

function b(){
  function a(){
    // ...
  }

  // ...
  a();
}

b();

如果内部函数不会在别处使用并且外部函数将被多次调用,则从中调出一个闭包并在封闭范围内定义内部。这样它赢了&# 39;每次通话都要重新定义。当内部函数复杂和/或多次调用外部函数时,这更有意义。

var b = (function b(){
  function a(){
    // ...
  }

  return function(){
    // ...
    a();
  };
}());

b();
b();

其他性能影响可以忽略不计。