Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何正确使用lambda函数作为参数?_Javascript_Typescript - Fatal编程技术网

Javascript 如何正确使用lambda函数作为参数?

Javascript 如何正确使用lambda函数作为参数?,javascript,typescript,Javascript,Typescript,如果我有这样的陈述: public startDate=this.formatDate(new Date()) 我希望传递函数创建的日期,而不是传递新日期()。我知道我能做到: public startDate=this.formatDate(this.getDateFunc()) 但是有没有办法用lambda函数来实现呢?我试着查找它,但我发现的所有帖子都在讨论函数作为定义中的参数 我想做一些类似的事情: public startDate=this.formatDate(()=>{…})根据您

如果我有这样的陈述:

public startDate=this.formatDate(new Date())

我希望传递函数创建的日期,而不是传递新日期()。我知道我能做到:

public startDate=this.formatDate(this.getDateFunc())

但是有没有办法用lambda函数来实现呢?我试着查找它,但我发现的所有帖子都在讨论函数作为定义中的参数

我想做一些类似的事情:


public startDate=this.formatDate(()=>{…})

根据您的示例,假设您需要匿名函数调用。如果是,可以,您可以使用:

public startDate=this.formatDate(
(() => {
//做些别的事情
返回新日期(/*…args*/)
})()
)
但是,通常命名函数的可读性更好。


键入GetDate=()=>Date
const formatDate=(getDate:getDate)=>{
const date=getDate()
//格式化日期
}
//用法
const getDateFromInternet=()=>API.getDate()//获取日期的虚拟API
const formattedDate=formattate(getDateFromInternet)

“但是有没有办法用lambda函数实现它呢?我试着查找它,但是我找到的所有帖子都在讨论函数作为定义中的参数”lambda(箭头函数)是函数。但是,如果将一个函数作为参数,则这些函数都不重要。^请注意,arrow函数不一定是lambda函数。lambda是一个匿名函数。将箭头函数保存到变量中时,它不再是匿名的,因此不再是lambda。例如,
n=>n*2
是lambda,但是
constdouble=n=>n*2
不是lambda。有人可能会说后者仍然是一个未命名的函数,因此是lambda,但这取决于您对匿名的定义。@VLAZ谢谢,非常有用。因此,基本上,在任何语法上可以使用函数引用的场景中,也可以使用箭头函数?@rustytoaster21正确。函数和箭头函数在何时可以使用方面没有区别。区别在于它们与其他东西的交互方式——大多数箭头函数没有自己的
this
,而是使用词法函数,而普通函数可以有自己的
this
值。但这并不总是相关的-如果您获取一个参数
fn
,并将其作为
fn(someArg)
执行,那么无论
fn
是箭头函数还是正常函数,它都会起作用。
class A {
  public startDate = this.dateFactory();

  constructor(
    private dateFactory,
  ) {}

  ...
}
// somewhere in code
new A(() => new Date());