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