function say(something) {
console.log(something);
}
function exec(func, arg) {
return func(arg);
}
exec(say, "Hi, there.");
为什么此代码有效?我觉得不应该,因为第二个函数中的内容应该返回
say(something) (arg) {
console.log(something) ;
}
答案 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