如何访问几个嵌套函数中最内层的函数

How can I access the innermost function of several nested functions?

本文关键字:函数 嵌套 何访问 访问 几个      更新时间:2023-09-26

我似乎找不到正确的语法。我知道如何访问1级深的功能,但2级对我不起作用。

var firstFn = (function() {
  var secondFn = (function() {
    function inner() {
      return "hi";
    }
    return {
      inner: function() {
        return inner();
      }
    }
  })();
  return {
    secondFn: function() {
      return secondFn();
    }
  };
})();
console.log(firstFn.secondFn.inner());

secondFn实际上是一个函数对象。所以,你需要像这个一样调用它

console.log(firstFn.secondFn().inner());

注意:您的内部secondFn()返回一个对象,而不是函数。所以,你需要像这个一样改变它

return {
  secondFn: function() {
    return secondFn;       // Note the absence of `()`
  }
};

注意:我强烈建议您对函数和对象使用不同的名称,如下所示。这样就可以减少对正在发生的事情的理解。

var firstFn = (function() {
  var innerSecond = (function() {
    function innerFunction() {
      return "hi";
    }
    return {
      inner: function() {
        return innerFunction();
      }
    }
  })();
  return {
    secondFn: function() {
      return innerSecond;
    }
  };
})();

因此,firstFn是一个对象,它有一个称为secondFn的属性,这是一个函数。

当调用secondFn时,它会返回另一个名为innerSecond的对象,该对象具有一个称为inner的属性,其值为函数。

当您调用inner时,它实际上调用innerFunction并返回结果hi


如果您想遵循与innerSecond中相同的模式,那么您需要按原样返回函数对象,而不是像下面的那样调用它

var first = (function() {
  var innerSecondFunction = function() {
    function innerFunction() {
      return "hi";
    }
    return {
      inner: function() {
        return innerFunction();
      }
    }
  };    // Note that we don't invoke the function object here
  return {
    secondFn: function() {
      return innerSecondFunction();   // but we invoke here
    }
  };
})();
console.log(first.secondFn().inner());