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

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

最佳答案

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

关于javascript - 如何访问多个嵌套函数的最内层函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34750388/

相关文章:

C:创建一款游戏,但在某些情况下我遇到了一个错误和无限循环错误

c - 了解参数为 const 时的函数声明?

ruby-on-rails - 路由嵌套资源和匹配 Controller

c# - (嵌套)自定义对象列表中的列表

javascript - CKEditor 可同时调整大小和拖动

javascript - 如何修复显示 html 符号

c++ - OpenGL header 中的平台特定宏

javascript - LightSwitch 控制按键事件

javascript - 使用 ffmpeg 和 html5 构建录音机

php - 在html中保留嵌套的jquery可排序列表?