【问题标题】:JavaScript Arrow Function question, syntax problemJavaScript箭头函数问题,语法问题
【发布时间】: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("/");
 });

【问题讨论】:

标签: javascript node.js express mongoose passport.js


【解决方案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。结果,后续调用会报错。

    【讨论】:

    • 感谢您的评论!如果我有足够的积分,我会投票赞成评论,谢谢!
    • 没问题,很高兴它有帮助
    猜你喜欢
    • 2020-11-30
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 2015-11-11
    • 1970-01-01
    • 2017-03-05
    相关资源
    最近更新 更多