这篇文章是The JavaScript block statement的读后感。
你有没有遇到过写单元测试时,多个场景多个变量表达同一个意思,但为了避免命名冲突,又不得不想不同名字的场景?
function validatePassword()
{
//...
}
function testChangePasswordProcess()
{
const oldPassword=document.querySelector('.old-password');
validatePassword(oldPassword);
const newPassword=document.querySelector('new-password');
validatePassword(newPassword);
const repeatPassword=document.querySelector('repeat-password');
validatePassword(repeatPassword);
}
上面的代码没有什么大问题,都是在验证各种场景下的密码,那如果我们想把它们都命名成password要怎样做呢?
function validatePassword()
{
//...
}
function testChangePasswordProcess()
{
const password=document.querySelector('.old-password');
validatePassword(password);
{
const password=document.querySelector('new-password');
validatePassword(password);
}
{
const password=document.querySelector('repeat-password');
validatePassword(password);
}
}
{}可以创建一个块级作用域,在该作用域里的对象只在{}内可见。
在测试用例里使用这个技术我觉得是优雅的,因为{}也可以包裹一整个用例。在生产代码里使用要保持克制,因为它会分割代码块,不易阅读。