是否必须重新定义嵌套函数?

时间:2012-02-01 01:56:46

标签: javascript

对于体系结构和命名空间,我想这样做:

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()吗?

1 个答案:

答案 0 :(得分:4)

您可以使用闭包:

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;
  }
}());

内部保存在一个闭包中,并且对外部保持“私有”,并且仅在外部初始化时创建一次。