为什么这不会在内联工作中断?

时间:2015-12-06 09:41:11

标签: javascript

我想知道为什么这个while循环在使用内联时首次运行,如果有两个动作(break;是第二个):

var list = [4, 2, 1, 3];

while (list.length) {
    list.splice(0, 1);
    console.log("length is now: " + list.length);

    if (list.length === 2) console.log("break!"); break;
}

将最后一行更改为此工作正常:

if (list.length === 2) break;

......这样做:

if (list.length === 2) {
    console.log("break!");
    break;
}

AFAIK可以在内联中执行多个操作,如下所示:

if (true) console.log("true"); console.log("still true");

2 个答案:

答案 0 :(得分:5)

  

AFAIK可以在内联中设置多个动作,如下所示:

不,不是。为此,您需要一个块({...}):

if (list.length === 2) {
    console.log("break!");
    break;
}

if之类的控制流语句接受单一语句作为正文。如果你需要将body多个语句设置得很长,那么该语句可以是

无论你如何写它(除了风格,可读性和可维护性之外):

if (list.length === 2) { console.log("break!"); break; }

JavaScript解析器几乎完全忽略了换行符(几乎,因为自动分号插入,如果解析器在找到它们应该出现的换行符的情况下需要使用缺少分号来修正代码,那么

答案 1 :(得分:0)

如果没有花括号,则内联if语句在第一个语句后停止执行。

示例:

if (list.length === 2) console.log("break!"); break;

这将使console.log作为唯一的语句运行,并且无法到达另一个中断;言。

使用带有花括号的内联if语句几乎不是一件好事

if (list.length === 2) {console.log("break!"); break;}

养成用花括号编写if语句的习惯。你不会后悔的!

编写内联if语句没有花括号可能会产生一些不需要的行为并且难以维护。而且,阅读起来并不好玩。我们需要花括号。

希望这有帮助!

相关问题