在NodeJS中,我将第一个函数作为第二个函数的参数传递,如下所示:
第一个功能
function sayHello(){
console.log('Hello World!');
}
第二个功能
function log(func){
func();
}
将第一个函数作为第二个函数的参数传递(1):
log(sayHello)();
当我运行上面的代码(1)时,有一个 TypeError ,正确的方法是:
log(sayHello); //Without a pair of brackets at the end of the line
为什么我不能使用log(sayHello)()
来调用普通函数?
答案 0 :(得分:1)
几点:
如果我理解你的问题,你会问为什么要
FUNC(a)中
而不是
func(a)()
非常简单:因为func(a)()执行其他操作:它与(func(a))()相同:
如果您的函数没有return语句,则返回undefined。所以你实际上在做:
undefined()
undefined不是来自可以执行的类型。所以你得到了一个typeError。
我们举几个例子:
function sayHello(){
console.log('Hello World!');
}
function thatReturnSomeThing(){
return 123
}
function log(myFunc){
myFunc()
}
function logWithReturn(myFunc){
return myFunc()
}
function justReturn(myFunc){
return myFunc
}
function functionThatReturnAFunction(){
return function() {return "lots of returns here"}
}
let a = log(sayHello)
console.log("a = " + a) // undef
let b = logWithReturn(sayHello)
console.log("b = " + b) //undef because console.log does not return anything
let c = log(thatReturnSomeThing)
console.log("c = " +c) // undef cause log does not return anything
let d =logWithReturn(thatReturnSomeThing)
console.log("d = " + d) //123 because we returned the result of thatReturnSomeThing, which as well returned something different than undef
let e = logWithReturn(functionThatReturnAFunction)
console.log("e = " + e) //we returned a function, so we log the function itself
let f = logWithReturn(functionThatReturnAFunction)() //the behaviour you actually wanted is that I think
console.log("f = " +f)
我让你运行那段代码,我希望它能帮助你理解函数和返回对象(可以是一个函数)之间的区别。
答案 1 :(得分:0)
function sayHello(){
return console.log('Hello World!');
}
function log(func){
return func;
};
log(sayHello)();
就这样做。你说你好没有回来。
答案 2 :(得分:0)
log()
的返回类型不是您获得类型错误的函数。当您致电log(sayHello)
时,它正在拨打sayHello()
,然后拨打console.log()
。然后console.log()
返回给定的输入,而不是函数。
如果您想呼叫log(sayHello)()
,只需按照以下说明更改日志功能:
function log(func){
return func;
}