将函数作为参数传递给函数

时间:2019-04-11 08:05:42

标签: javascript

function say(something) {
  console.log(something);
}

function exec(func, arg) {
  return func(arg);
}

exec(say, "Hi, there.");

为什么此代码有效?我觉得不应该,因为第二个函数中的内容应该返回

say(something) (arg) { 
  console.log(something) ; 
}

3 个答案:

答案 0 :(得分:1)

函数say返回未定义(如果不使用return关键字,则为默认值),因此函数exec也返回未定义。

证明:

function say(something) {
  console.log(something);
}

function exec(func, arg) {
  var result = func(arg);
  console.log(result);
  return result;
}

var result2 = exec(say, "Hi, there.");
console.log(result2);

答案 1 :(得分:1)

之所以如此,是因为当您编写return func(arg);时,func(arg)位会执行该功能。然后返回执行func(arg)结果

但是,没错,say()实际上没有返回任何值,它只是记录到该函数中的控制台。您看到的输出是该log命令的结果。如果您记录了返回的值,则会看到undefined作为结果。

但是,如果您向exec传递了另一个函数,该函数 did 返回了一个值,那么您将需要return中的exec()正常工作。

P.S。我不确定这是否是您要问的部分,但是与您编写exec(say, "hi there");时的区别在于,在该代码中,say是对的引用“说”功能。那时,它就像其他任何变量一样对待,就像您传入数字或字符串一样。

不同之处在于(),它使函数得以执行,而不是作为引用传递。

在这个问题中,您似乎暗示您希望显示say()函数的源代码,但这不是它的作用,而且也不可能。

答案 2 :(得分:1)

也许您正在寻找一个闭包,其中exec返回一个函数,该函数用于获取第一个移交函数arg的{​​{1}}。

func