【问题标题】:Why does a function inside a function doesn't work?为什么函数内部的函数不起作用?
【发布时间】:2020-06-22 14:36:32
【问题描述】:

下面代码中的输出只有Message 1!

function alertThenReturn() {
  alert('Message 1!');

  return function () {
    alert('Message 2!');
  };
}

下面代码的输出(将上面相同的函数保存在一个变量中之后)是Messege1!Messege2!

function alertThenReturn() {
  alert('Message 1!');

  return function () {
    alert('Message 2!');
  };
}

const innerFunction = alertThenReturn();

变量innerFuciton 中函数的预期输出与原始函数alertFunction 相同。 alertFunction 的输出如何通过将其保存在另一个变量中来改变

我知道alertThenReturn 不会返回第二个警报,但是...为什么当函数存储在原始函数的变量(在本例中为innerFunction)时会返回第二个警报并且变量应该相同并且输出应该相同

编辑:很多人说在添加最后一行后,代码不会返回两个警报,但实际上会返回两个警报。

【问题讨论】:

  • 除非您致电innerFunction,否则不会发生这种情况。
  • "该函数提供两个警报,尽管没有任何改变,它只是保存在另一个变量中" - 不会有 "两个警报",除非你有一个 innerFunction()const innerFunction = ... 之后立即执行
  • 这只会显示“消息 1!”。返回值是内部函数,它被分配给innerFunction,但没有被调用。
  • 我不明白你在问什么。如果你返回一个函数,它不会被自动调用。这就是返回函数的全部意义,这样您就可以稍后而不是立即调用它。
  • @MarcoMaher 是的,这更清楚了。使用const innerFunction = alertThenReturn();,您不会存储外部函数。为此,您需要使用const innerFunction = alertThenReturn;。通过添加括号,您正在执行外部函数(并触发第一个警报),并且返回值(内部函数)存储在该变量中。因此,当您随后调用 innerFunction() 时,将执行内部函数并显示第二个警报。

标签: javascript function object alert


【解决方案1】:

alertThenReturn() 返回函数但你没有调用它。如果您致电innerFunction,您将获得第二个。

function alertThenReturn() {
  alert('Message 1!');

  return function () {
    alert('Message 2!');
  };
}

const innerFunction = alertThenReturn()();

【讨论】:

  • 是的,我明白你的意思,但这不是我的问题两个警报
  • 您不能接收 2 个警报。因为第二个是 return 你只是返回包含 alert 方法的函数。
【解决方案2】:

对于alertThenReturn 的给定实现,仅const innerFunction = alertThenReturn() 不可能发出两次警报。

它会提醒一次:

function alertThenReturn() {
  alert('Message 1!');

  return function () {
    alert('Message 2!');
  };
}

const innerFunction = alertThenReturn()

要提醒两次,需要调用alertThenReturn的结果(本例为innerFunction):

function alertThenReturn() {
  alert('Message 1!');

  return function () {
    alert('Message 2!');
  };
}

const innerFunction = alertThenReturn()

innerFunction()

或者,立即调用调用alertThenReturn() 的结果以获得相同的效果:

function alertThenReturn() {
  alert('Message 1!');

  return function () {
    alert('Message 2!');
  };
}

alertThenReturn()()

【讨论】:

  • 您说不可能仅 const innerFunction = alertThenReturn() 在给定的 alertThenReturn 实现下会发出两次警报。但我希望你运行它。它会工作
  • @MarcoMaher 我的答案中的第一个 sn-p 提醒一次。
【解决方案3】:

只定义方法本身不应该发出警报,但是当你在行中调用它时:

const innerFunction = alertThenReturn();

发生的事情是alertThenReturn 发送一条警报消息,然后返回您的内部函数。所以当你运行时

innerFunction()

这将为您提供消息 2 的输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 2014-12-05
    • 2016-07-17
    相关资源
    最近更新 更多