Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.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困难-传递给内部函数的参数和括号的使用_Javascript_Closures_Parentheses_Arrow Functions - Fatal编程技术网

Javascript困难-传递给内部函数的参数和括号的使用

Javascript困难-传递给内部函数的参数和括号的使用,javascript,closures,parentheses,arrow-functions,Javascript,Closures,Parentheses,Arrow Functions,有人能帮我澄清一下吗 const connection = (closure) => { return mongoClient.connect(connectionString,(err,db) => { if(err) return console.log(err); closure(db); }); }; 显然: “connection”常量存储一个接受参数的函数(闭包) connect()返回null,但反过来填充回调中的参数

有人能帮我澄清一下吗

const connection = (closure) => {
    return mongoClient.connect(connectionString,(err,db) => {
        if(err) return console.log(err);
        closure(db);
    });
};
显然:

  • “connection”常量存储一个接受参数的函数(闭包)
  • connect()返回null,但反过来填充回调中的参数
  • 如果发生错误,err会将日志记录到控制台,但是(这里是最令人困惑的部分)closure会使用括号将其自身包装在db中,这会给出什么
  • 由于connect()返回null,是否可以用一些赋值语句(例如closure=db;)替换它,然后删除返回语句?这里需要什么样的返回语句 谢谢你所做的一切 艾尔

    如果发生错误,err会记录到控制台,但是(这里是最容易混淆的部分)closure使用括号将其自身环绕在db周围,从而给出?

    不是“尽管如此”。
    闭包
    行仅在没有错误时发生,因为如果有错误,函数将立即返回

    另外,
    closure
    后面的括号只是调用它,因此
    closure
    应该是一个函数。无论它返回什么,都将是它的结果

    由于connect()返回null,是否可以用一些赋值语句(例如closure=db;)替换它,然后删除返回语句?这里需要什么样的返回语句

    返回
    仅用于退出该功能。它返回
    console.log的结果这一事实在这里并不重要。他们这样做只是为了把它放到一个语句中,这样他们就不需要花括号了

    const connection = (closure) => {
        return mongoClient.connect(connectionString,(err,db) => {
            if(err) {
              console.log(err);
              return;
            }
            closure(db);
        });
    };
    
    我想您指的是最里面的
    返回。外部数据库不能使用
    db
    ,因为它只存在于传递给
    connect
    的回调中。如果
    .connect()
    总是返回
    null
    ,那么是的,不需要外部
    返回
    ,但是,您不能只使用
    db
    。代码的其余部分仍然是必需的


    需要说明的是,您无法从传递到
    connect
    的回调中获取任何值。它在外部函数和
    .connect()
    返回之后很长时间被调用。

    “闭包使用括号将自身包裹在db周围”-什么?这是一个函数调用。不,记录错误时不会发生,因为函数
    if
    块中返回
    s。诚然,使用
    if(err)console.log(err);else闭包(db)会更干净。那么在我提供的版本中是否有隐藏的其他版本?谢谢你的回复。我认为如果(只有)blockNo,就没有隐藏的
    else
    ,这是一个简写。在
    if
    中有一个
    return
    ,这会导致无法到达缩写if后面的语句。