0

如果我不担心会污染全局范围并且调用函数 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();
4

2 回答 2

2

当你使用一个符号时,它的相关值会在环境链中寻找,从内部开始向外移动。这意味着首先找到内部(本地)环境而不是全局环境,但在性能上没有真正的差异。

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

  • 内部功能将来可能对其他功能有用吗?

如果不,

  • 我可以以一种创建更通用的函数的方式抽象内部函数,该函数可能在其他地方有用吗?
于 2013-06-15T12:48:23.567 回答
0

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

如果内部函数将在其他地方使用,请不要嵌套它。出于显而易见的原因。

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

a();
b();

如果内部函数不会在其他地方使用,则嵌套它。它看起来更干净,并增加了外部函数的逻辑完整性(相关内容被视觉封闭)。

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

  // ...
  a();
}

b();

如果内部函数不会在其他地方使用并且外部函数将被多次调用,则对其进行闭包并在封闭范围内定义内部函数。 这样它就不会在每次调用时重新定义。当内部函数很复杂和/或外部函数被多次调用时,这更有意义。

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

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

b();
b();

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

于 2016-10-21T14:16:28.973 回答