【发布时间】: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