我会尽量让这个简洁......
随着 ES6 的大肆宣传,我觉得使用 var
关键字越来越受到整个 JS 社区的反对。由于这种(感知到的)普遍共识,我已经养成了避免使用 var
代替较新的 const
和 let
的习惯创建变量的关键字。
下面是我编写的代码块示例,其中我无法使用 const
因为我想重新定义一个变量。我还使用了 async/await
,所以所有代码都在同一个 block-level scope
中,这显然会阻止您重新定义 let
变量.所以我唯一的选择是使用 var
(或创建另一个 let
变量)。
这是代码。通过 Mongoose 将新用户帐户保存到 MongoDB 中...
router.post('/signup', async (req, res, next) => {
const { email, password } = req.body;
const user = await userModel.findOne({ email });
if (user) { res.send('Email already in use.'); return; }
// here is where the issue occurs - use var instead?
let newUser = new userModel({ email, password });
let newUser = await newUser.save();
console.log(newUser); // just checking everything works
res.send({ message: 'New user account created!' });
});
MDN 仅用一句话就提到了这种行为!那没有用。 :( 然后他们继续讨论提升行为,这不是我的问题,或者至少我看不出这有什么关系。MDN Source Here。
所以总而言之...
这是
var
最适合使用的关键字的例子吗?如果现在不是使用
var
的时候,是否有 任何var
是最合适的关键字的实例使用,即使在 ES6 时代(7、8 等)?
免责声明:我知道我并非绝对需要保存这些变量,但在我看来,值得权衡的是编写稍微更冗长但也更易读和理解的代码。我可以使用 var
,我只是觉得这是一个有趣的案例。
最佳答案
没有理由在 ES6 中使用 var
。 const
应该是你的默认值。使用 let
而不是 const
的唯一原因是当你想稍后在同一 block 中重新分配变量时。在这种情况下,您无需再次声明它,只需为其分配新值即可:
let newUser = new userModel({ email, password });
newUser = await newUser.save();
// allowed to reassign because `newUser` is not `const`
根据 save
的作用,我想你可以这样做:
const newUser = new userModel({ email, password });
await newUser.save();
newUser.save();
应该拒绝它在保存失败时返回的 Promise,await 将转换为抛出的错误。所以在await
之后的代码中应该没有保存成功与否的问题。如果达到这些行,则保存成功。
关于javascript - 尽管有 ES6,是否存在 var 是最适合使用的关键字的情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50147411/