为什么函数内部的函数不起作用?

时间:2020-06-22 14:36:32

标签: javascript function object alert

以下代码中的输出仅为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)原始函数和变量应相同,输出应相同

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

3 个答案:

答案 0 :(得分:0)

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

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

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

const innerFunction = alertThenReturn()();

答案 1 :(得分:0)

在给定的const innerFunction = alertThenReturn()实现下,仅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()()

答案 2 :(得分:0)

仅定义方法本身不应发出警报,而应在行中调用它:

const innerFunction = alertThenReturn();

发生的事情是alertThenReturn发送了一条警告消息,然后返回了您的内部函数。因此,当您运行

innerFunction()

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