JavaScript箭头函数问题,语法问题

Posted

技术标签:

【中文标题】JavaScript箭头函数问题,语法问题【英文标题】:JavaScript Arrow Function question, syntax problem 【发布时间】:2021-04-14 18:14:43 【问题描述】:

首先,抱歉标题含糊不清,如果不直接显示,我真的不知道如何解释。我是 javascript 新手,一直在学习箭头函数,但是我不认识这种类型的箭头函数/语法。

目前,我正在创建一个网站,并使用带有猫鼬的护照添加会话 cookie。我正在使用的教程使用箭头函数的方式非常奇特,无法在线找到任何与语法有关的信息。

这是简化的代码

foo(bar)(()=>
    ... Code Here ...
);

我了解箭头函数,但我不明白括号在这种情况下是如何工作的以及到底发生了什么?

        |
        V
foo(bar)(...)

我无法在网上找到任何关于此的信息,而且很奇怪,当我在教程中运行该函数时,它运行时没有任何错误,但是,如果我使用类似这样的方法来执行此操作,

function foo()
    console.log("In foo");


foo()(()=>
    console.log("In bar");
);

我会得到一个错误提示

foo is not a function

如果需要,实际运行的代码将在下方

(此代码在服务器上运行,req 是发送到 GET 请求的请求数据,我在这里使用护照 JavaScript 和猫鼬。 res 变量是对用户的响应,是的,此代码可以正常工作很好,没有错误,它做了它需要做的事情,我只是不明白这个语法是如何工作的)。

req.authenticate("local")
 ((req, res)=>
   res.redirect("/");
 );

【问题讨论】:

相关:"What do multiple arrow functions mean in javascript?" 【参考方案1】:

你有一个函数foo被调用一个参数bar,它返回一个以箭头函数作为参数的函数。 因此,栏后的左括号是您调用foo 返回的函数的位置。

function foo(bar)
    console.log(bar);
    return function(arrow)
        arrow();
    

    
foo('bar')( ()=>
    console.log("In bar");
 );

【讨论】:

【参考方案2】:

req.authenticate("local") 正在返回一个接受另一个函数的函数,你可以这样想:

// foo can be viewed as a function because the return value from
// req.authenticate("local") is a function
const foo = req.authenticate("local");

现在,如果您将 foo 视为常规函数,那么 foo(bar) 应该是您熟悉的语法

语法有效是因为req.authenticate("local") 正在返回一个函数,因此您可以使用后续参数调用它。

但是,在您的自定义代码中

function foo() 
    console.log("In foo");

您没有返回函数,而是隐式返回undefined。结果,后续调用会报错。

【讨论】:

感谢您的评论!如果我有足够的积分,我会投票赞成评论,谢谢! 没问题,很高兴它有帮助

以上是关于JavaScript箭头函数问题,语法问题的主要内容,如果未能解决你的问题,请参考以下文章

javascript 箭头函数语法

JavaScript初学者必看“箭头函数”

JavaScript箭头函数

如何对 NeDB 数据库进行排序以获取响应? (Javascript 回调/箭头函数语法混乱)

javascript基础修炼——指向FP世界的箭头函数

JavaScript 箭头函数:适用与不适用场景