【问题标题】:Higher Order Function invocation behavior is very confusing高阶函数调用行为非常混乱
【发布时间】:2018-05-09 14:32:27
【问题描述】:

我试图在一个没什么大不了的函数中调用一个函数,但由于某种原因,我不明白为什么我不能通过这个逻辑调用一个函数:

function func1(futurefunc){
  futurefunc();
}

function func2(){
  return 3+3;
}

func(func2);

现在上面代码的结果是未定义的。但是,当我输入:func(alert) 时,会调用警报参数。我不明白为什么第二种情况正在运行,而第一部分没有打印返回值,在这种情况下为 6。

但是当我尝试以下操作时:

function func1(futurefunc){
  return futurefunc();
}

代码似乎提供了正确的值,在本例中为 6。任何明确的解释。我希望我没有遗漏任何东西。

【问题讨论】:

  • 如果确实是您使用的语言,您应该添加一个 javascript 标签。函数调用语义取决于语言。
  • 您不明白为什么您的第一个案例没有返回任何内容,即使您缺少return 语句?为什么会让人困惑?
  • @Tomalak 由于括号而令人困惑,我认为它只需要调用函数参数,因此既然函数参数返回 3+3,那么我认为这将是返回值.我正在通过添加括号来学习调用函数,我猜我忘记了基础知识:)
  • 感谢@Gene 的建议,我忘记了!
  • futurefunc() 不会被return 3+3“取代”,如果你有这样的想法的话。它被6“替换”。所以结果值会在那里,但是JS函数不会自动返回值。

标签: javascript function functional-programming higher-order-functions


【解决方案1】:

第一种情况,func1 只是调用futurefunc() 并且没有return 任何东西所以undefined 被打印出来。

当您通过时,警报,警报被调用,然后您会看到对话框。

第二种情况,func1调用futurefunc并返回结果,所以打印6。

这里没有什么难理解的。

【讨论】:

  • 我正在学习使用括号在函数中调用函数,但我忘记了我总是需要 return 关键字才能返回值。我认为通过调用函数就足够了,因为在函数中有返回 3+3,认为这足以返回值。但似乎我错了。谢谢解释
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 2011-02-13
  • 2018-11-30
  • 2013-01-26
  • 1970-01-01
  • 2016-11-19
相关资源
最近更新 更多