【问题标题】:returning outer function from inner function从内部函数返回外部函数
【发布时间】:2013-06-07 19:28:50
【问题描述】:
function MyFunction () {

   if (SomeCondition) {

      MyInnerFunction(SomeParam);
      return;
   }   

   if (SomeOtherCondition) {

      MyInnerFunction(SomeOtherParam);
      return;
   } 

   if (SomeThirdCondition) {

      MyInnerFunction(AnotherParam);
      return;
   } 

   function MyInnerFunction(Param) {

      // Do some work here
      // HERE: I want return from MyFunction
   }
}

如您所见,当MyInnerFunction 返回时,下一条要执行的语句是MyFunctionreturn 语句。有没有办法消除所有这些返回语句,以便 MyFunction 的返回在 MyInnerFunction 内部执行?

谢谢。

【问题讨论】:

  • 不,没有。你想要的是不可能的。内部函数无法控制外部。你可以改用return MyInnerFunction(AnotherParam);
  • else if 怎么样?
  • MyFunction还有其他代码吗?为什么不直接删除所有 return; 行?
  • 为什么不直接将返回值添加到调用函数的同一行(并确保内部函数不返回任何内容)?如果你真的想编写一些迟钝的代码来到达你想要的地方而不遵循逻辑堆栈进展,你也可以滥用 try/catch(显然不推荐......除非它真的有意义)。
  • 我同意@Prinzhorn,else ifswitch 应该可以解决问题。

标签: javascript


【解决方案1】:

您可以重新格式化代码,以便您的 if 条件仅修改参数。 然后你只需在最后用正确的参数调用你的方法

function MyFunction () {
   var params; 

   if (SomeCondition)
      params = SomeParam;
   else if (SomeOtherCondition)
      params = SomeOtherParam;
   else if (SomeThirdCondition)
      params = AnotherParam;

   MyInnerFunction(params);
}

【讨论】:

  • 不,即使在 MyInnerFunction 执行之后,每个“if(Condition)”语句仍然会被执行。我拥有所有这些 return 语句的原因是,一旦 MyInnerFunction 执行,MyFunction 立即返回,并且不会评估其他 if 语句。
  • 为什么不希望执行条件?
  • 因为没有必要,所以只会运行一个条件。
  • 你可以把它改成else if,那么只有一个应该被执行,其他的跳过。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-23
  • 1970-01-01
  • 2016-08-08
  • 2011-08-01
相关资源
最近更新 更多