Typescript-如何将函数指针传递给函数并在函数体内调用

时间:2019-07-09 08:45:32

标签: typescript function-pointers

我正在尝试将函数指针传递给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(); });

请在这里https://jsfiddle.net/17w246uz/

2 个答案:

答案 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()));