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

时间:2016-01-12 17:42:20

标签: javascript function nested

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

1 个答案:

答案 0 :(得分:9)

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的属性,其值为function。

当您调用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());