Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.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_Node.js - Fatal编程技术网

Javascript 具有相同变量名的多个声明以及对象分解

Javascript 具有相同变量名的多个声明以及对象分解,javascript,node.js,Javascript,Node.js,在这种情况下,我希望在对象分解过程中多次使用相同的变量名: let {body, response} = await requestp('get', `${cdtAPIUrl}/whitelist`, headers); let parsedBody = await siamese.parse(body); assert(parsedBody.success, 'response body should have a success property.'); assert(parsedBody.

在这种情况下,我希望在对象分解过程中多次使用相同的变量名:

let {body, response} = await requestp('get', `${cdtAPIUrl}/whitelist`, headers);
let parsedBody = await siamese.parse(body);
assert(parsedBody.success, 'response body should have a success property.');
assert(parsedBody.success.length === usernames.length, 'wrong number of items in response body array.');
let {body, response} = await requestp('get', `${cdtAPIUrl}/caches/whitelist`, headers);
let parsedBody = await siamese.parse(body);
但是,当我使用node运行脚本时,node会在运行前抱怨:

SyntaxError: Identifier 'body' has already been declared
有两个问题使我无法轻松解决:

  • 我无法使用对象分解来执行此操作:

    let {body, response} = await requestp('get', `${cdtAPIUrl}/whitelist`, headers);
    let parsedBody = await siamese.parse(body);
    assert(parsedBody.success, 'response body should have a success property.');
    assert(parsedBody.success.length === usernames.length, 'wrong number of items in response body array.');
    let {body, response} = await requestp('get', `${cdtAPIUrl}/caches/whitelist`, headers);
    let parsedBody = await siamese.parse(body);
    
    设{a,b}=c
    
    {a,b}=c;//不允许

  • 我无法重命名
    body
    response
    ,因为这是调用返回的内容

  • 我该怎么办

    也许最好的做法是:

    let {body,response} = ...
    let {body:body1, response:resp1} = ...
    
    我不能用对象解构来实现这一点:
    {a,b}=c

    你可以,你只需要:

    也许最好的方法是
    let{body:body2,response:resp2}=…

    是的,这确实是最好的解决办法。您甚至可能想使用
    const
    而不是
    let

    我该怎么办

    另一个解决方案是为变量引入单独的作用域,我不一定推荐,但为了完整性,我只想提及:

    {
      let {body, response} = await requestp('get', `${cdtAPIUrl}/whitelist`, headers);
      let parsedBody = await siamese.parse(body);
      assert(parsedBody.success, 'response body should have a success property.');
      assert(parsedBody.success.length === usernames.length, 'wrong number of items in response body array.');
    }
    {
      let {body, response} = await requestp('get', `${cdtAPIUrl}/caches/whitelist`, headers);
      let parsedBody = await siamese.parse(body);
    }
    
    当然,您也可以使用
    var
    而不是
    let
    ,这样就不会抱怨重新声明了

    我不能用对象解构来实现这一点:
    {a,b}=c

    你可以,你只需要:

    也许最好的方法是
    let{body:body2,response:resp2}=…

    是的,这确实是最好的解决办法。您甚至可能想使用
    const
    而不是
    let

    我该怎么办

    另一个解决方案是为变量引入单独的作用域,我不一定推荐,但为了完整性,我只想提及:

    {
      let {body, response} = await requestp('get', `${cdtAPIUrl}/whitelist`, headers);
      let parsedBody = await siamese.parse(body);
      assert(parsedBody.success, 'response body should have a success property.');
      assert(parsedBody.success.length === usernames.length, 'wrong number of items in response body array.');
    }
    {
      let {body, response} = await requestp('get', `${cdtAPIUrl}/caches/whitelist`, headers);
      let parsedBody = await siamese.parse(body);
    }
    

    当然,您也可以使用
    var
    而不是
    let
    ,这不会抱怨重新声明。

    错误是由于再次使用
    let
    声明同名变量造成的。如果你想重用body,要么使用
    var
    ,要么放弃
    let
    ,第二次不使用任何东西。@chris我认为OP已经了解了导致错误的原因,所以我没有再提过它。我认为块作用域可能是最干净的方法,或者使用var而不是let。顺便说一句,回答得很好(对一个伟大的问题;)这个错误是由于再次使用
    let
    来声明同名的变量引起的。如果您想重用body,可以使用
    var
    或者删除
    let
    而第二次不使用任何内容。@chris我想OP已经理解了导致错误的原因,所以我没有再次提及它。我认为块范围可能是最干净的这是一个很好的方法,或者使用var而不是let