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

Jef*_*eff 3 javascript nested function

我似乎无法为此获得正确的语法.我知道如何深入访问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());
Run Code Online (Sandbox Code Playgroud)

the*_*eye 9

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

console.log(firstFn.secondFn().inner());
Run Code Online (Sandbox Code Playgroud)

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

return {
  secondFn: function() {
    return secondFn;       // Note the absence of `()`
  }
};
Run Code Online (Sandbox Code Playgroud)

注意:我强烈建议您为函数和对象使用不同的名称,例如:因此,理解正在发生的事情会更容易让人困惑.

var firstFn = (function() {
  var innerSecond = (function() {

    function innerFunction() {
      return "hi";
    }

    return {
      inner: function() {
        return innerFunction();
      }
    }

  })();

  return {
    secondFn: function() {
      return innerSecond;
    }
  };

})();
Run Code Online (Sandbox Code Playgroud)

所以,firstFn是一个具有被称为属性的对象secondFn,它是一个函数.

secondFn调用它时,它返回另一个被调用的对象innerSecond,该对象具有一个名为innervalue 的属性.

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


如果你想遵循与in相同的模式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());
Run Code Online (Sandbox Code Playgroud)