为什么允许使用独立代码块?

时间:2019-04-03 15:52:47

标签: javascript

我最近被一个虫子咬了。我有这样的代码:

if (x == 1)
{
    do_stuff();
}
else
{
    do_other_stuff();
}

但是,我错误地省略了else一词,因此总是执行第二个代码块。

允许这种独立代码块的理由是什么?我认为有充分的理由。

4 个答案:

答案 0 :(得分:4)

  

block语句在其他语言中通常称为复合语句。它允许您在JavaScript只需要一个语句的情况下使用多个语句。将语句组合成块是JavaScript中的一种常见做法。使用空语句可能会出现相反的行为,尽管您需要提供一个不提供任何语句的语句。

  

该块由一对大括号分隔,并且可以选择为labelled(这意味着它可以与break或Continue语句一起使用)

此外,它允许使用letconst

来限制块范围的变量。

var x = 'Function scope'; {
  let x = 'Block Scope';
  console.log(x);
}

console.log(x);

参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/block

答案 1 :(得分:4)

block statement仅用于复合语句的分组。

这允许break在函数或站点外运行,而无需使用return语句。

var a = 10;

block: {
    if (a === 10) break block;

    console.log('still in block');
}

console.log('outside block');

答案 2 :(得分:3)

这样想吧……独立块不是该语言允许的特殊结构,而是这些块是一种声明。引用MDN

  

阻止语句(或其他语言的复合语句)用于将零个或多个语句分组。

这意味着if / else之类的结构可以定义为

if (<<expression>>) <<statement>> [ else <<statement>> ]

由于foo(){ foo(); }都是语句,因此语言可以将以下内容视为同一内容:

if (true) foo();
if (true) { foo(); }

您说您是由于错字而被“咬伤”的。尽管孤立块是该语言的核心功能,但它们可能是逻辑错误或代码气味的标志。如果您想尽早发现此类问题,建议您在项目中安装eslint。特别是no-lone-blocks规则可以捕获此特定的错误。启用此规则后,以下代码:

if (x == 1)
{
    do_stuff();
}
{
    do_other_stuff();
}

会产生错误:

  

块是多余的。 (无孤立块)

答案 3 :(得分:1)

ifelsefordowhile期望一个语句。

块只是执行多个语句的一种方法-或不执行任何语句。

允许独立式块,原因与允许独立式语句相同。如果您忘记了else,则此代码也会失败,因为do_other_stuff()总是会执行:

if (x == 1)
    do_stuff();
else
    do_other_stuff();