如何访问多个嵌套函数的最内层函数?

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

我似乎无法获得正确的语法。我知道如何访问 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 是一个对象,而不是一个函数。所以,你需要像这样改变它

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 时,它 return 是另一个名为 innerSecond 的对象,它有一个名为 inner 的 属性 ,其值为函数。

当您调用 inner 时,它实际上会调用 innerFunction 并且 return 是结果 hi


如果您想遵循与 innerSecond 中相同的模式,那么您需要 return 函数对象,而不是像这样调用它

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