_ = _ => _(_); _(_)是什么意思?

maa*_*sht -3 javascript

我刚遇到这段代码

_=_=>_(_);_(_)
Run Code Online (Sandbox Code Playgroud)

它是用javascript编写的。我不知道这是怎么回事。这个笑脸代码是什么意思?

p.s*_*w.g 9

分解语法:

  • _=… 隐式声明一个名为的全局变量_,并将其赋值给右边的表达式结果。除非已在其他位置声明变量,否则这将在严格模式下引发错误。
  • _=>…是一个箭头函数,也称为lambda expression,它接受一个名为的参数_(该参数将遮盖全局变量的名称),并在右侧返回表达式的结果。
  • _(_)调用参数_,就好像它是一个函数一样_作为该函数的第一个参数传入。之所以可行,是因为JavaScript具有一流的函数,因此它们可以用作其他函数的参数或从函数中返回(并非在所有语言中都是如此)。

到目前为止,_=_=>_(_);创建了一个接受函数作为参数的高阶函数,并以自身作为参数调用第二个函数,然后将其分配给名为的全局变量_

  • 最后_(_)将调用_具有相同全局变量的全局变量_作为参数。

结果将是相当快的堆栈溢出,因为这实际上是一种没有任何转义条件的递归函数。但是,现代浏览器很可能会通过引发错误而不是崩溃而优雅地摆脱无限递归。

try {
    _=_=>_(_);_(_)
} catch (error) {
    console.log(error.toString());
}
Run Code Online (Sandbox Code Playgroud)

  • @ maahi.dasht不要对自己太苛刻。故意混淆难以理解和使用相当高级的概念(如果您是lambda表达式和递归,如果您不熟悉它们,则需要付出一些努力才能找到答案),说实话,很难在其中完全解释所有这些概念一个答案。我的主要目标是为您(或其他读者)进行研究提供一个起点。 (3认同)