【发布时间】:2018-05-03 05:16:49
【问题描述】:
我会尽量让这个简洁...
随着 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是最适合使用的关键字的例子吗?
1234563 , 8 等)?
免责声明:我知道我并不绝对需要保存这些变量,但在我看来,编写稍微冗长的代码但也更易于阅读和理解是值得的。我可以使用 var,尽管这是一个有趣的案例。
【问题讨论】:
-
为什么这个代码块需要重新定义一个变量?我没看到。您可以“分配”给使用
let定义的变量就好了。我不知道var比选择合适的let或const更好。 -
不,没有任何一种情况应该使用
var而不是let或const。您可以重新分配使用let关键字定义的变量,方法与使用var定义的变量相同。并且永远没有任何充分的理由在同一范围内重新定义同一变量(不要阅读重新分配)。
标签: javascript ecmascript-6 async-await syntax-error