【问题标题】:When to nest functions in javascript?什么时候在javascript中嵌套函数?
【发布时间】:2013-06-11 23:42:46
【问题描述】:

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

【问题讨论】:

标签: javascript nested-function global-scope


【解决方案1】:

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

如果内部函数将在其他地方使用,请不要嵌套它。原因很明显。

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

a();
b();

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

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

  // ...
  a();
}

b();

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

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

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

b();
b();

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

【讨论】:

    【解决方案2】:

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

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

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

    如果没有,

    • 我能否以某种方式抽象内部函数以创建一个更通用的函数,该函数可能在其他地方有用?

    【讨论】:

    • 如果 var v 不是全局的,而是传递给内部函数怎么办?
    • 如果 v 作为参数传递给内部函数,则您正在从副作用方法转变为函数方法,这几乎总是更好。您正在获得相同的结果,而不是操作全局变量,而是操作您的函数参数。从性能的角度来看,仍然没有区别。形式参数v 将位于最内部的环境(内部函数的本地环境)中。它会比外部环境和全局环境首先被发现。但是同样,这不会影响性能,重要的是其他事情..
    猜你喜欢
    • 2021-11-27
    • 1970-01-01
    • 2014-11-20
    • 2010-11-28
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 2012-08-14
    • 2022-01-24
    相关资源
    最近更新 更多