我正在尝试将函数指针传递给Typescript中的现有函数。以下内容应该可以使用,但是在致电agreet()
时收到未定义的信息,为什么?
function greeter(greetFuncPtr) {
console.log(greetFuncPtr); // returns ƒ () { greet(); }
console.log(greetFuncPtr()); // returns undefined
console.log(greet()); // returns "Hello"
return greetFuncPtr();
}
function greet() {
return "Hello";
}
document.querySelector("#app").innerHTML = greeter(() => { greet(); });
答案 0 :(得分:2)
箭头函数中使用的语法意味着箭头函数未返回greet
的结果,要返回该结果,您需要使用return
function greeter(agreet: () => string) {
console.log(agreet); // returns ƒ () { greet(); }
console.log(agreet()); // returns undefined
console.log(greet()); // returns "Hello"
return agreet();
}
function greet() {
return "Hello";
}
greeter(() => { return greet() });
还是不使用{}
:
greeter(() => greet());
或直接传递函数:
greeter(greet);
注意我添加到agreet
的类型首先会避免该错误,因为您会收到一个错误,即传入的箭头函数返回了void
而不是string
答案 1 :(得分:0)
在通过调用greeter(() => {greet()})
传递的箭头函数中,您缺少return
语句。因此,它返回undefined
。
简单的解决方法是:a)添加return
语句,或b)删除大括号:
function greeter(agreet) {
return agreet();
}
function greet() {
return "Hello";
}
console.log(greeter(() => {return greet()}));
console.log(greeter(() => greet()));