嵌套函数总是需要重新定义吗

Will a nested function always have to be redefined?

本文关键字:定义 新定义 函数 嵌套      更新时间:2023-09-26

出于架构和名称空间的目的,我想这样做:

function outer (arr) {
  function inner(arrElement) {
    return doStuffTo(arrElement); 
  }
  var results = [];
  arr.forEach(element, index, array) {
    results.push(inner(element));
  }
  return results;
}

所以基本上,一个函数中的一个函数。简单的东西。但是outer()是将被执行很多的东西。这是否意味着每次调用outer()时,定义函数(在评估函数的基础上)的开销都会应用?为了提高效率,我必须在外部定义inner()吗?

您可以使用闭包:

var outer = (function() {
  function inner(arrElement) {
    return doStuffTo(arrElement);
  }
  return function (arr) {
    var results = [];
    arr.forEach(element, index, array) {
      results.push(inner(element));
    }
    return results;
  }
}());

internal保存在闭包中,对outer保持"私有"状态,并且仅在初始化external时创建一次。