Go7hic/FeCodeGuide

关于js左花括号的写法

Opened this issue · 0 comments

左花括号的位置

开发人员对于左大括号的位置有着不同的偏好,在同一行呢还是在下一行?

if (true) {
    alert("It's TRUE!");
}
或者:

if (true)
{
    alert("It's TRUE!");
}

在这个例子中,看起来只是个人偏好问题。但有时候花括号位置的不同则会影响程序的执行。因为JavaScript会“自动插入分号”。JavaScript对行结束时的分号并无要求,它会自动将分号补全。因此,当函数return语句返回了一个对象直接量,而对象的左花括号和return不在同一行时,程序的执行就和预想的不同了:

// warning: unexpected return value
function func() {
    return
    {
        name: "Batman"
    };
}

可以看出程序作者的意图是返回一个包含了name属性的对象,但实际情况不是这样。因为return后会填补一个分号,函数的返回值就是undefined。这段代码等价于:

// warning: unexpected return value
function func() {
    return undefined;
    // unreachable code follows...
    {
        name: "Batman"
    };
}

结论,总是使用花括号,而且总是将左花括号与上一条语句放在同一行:

function func() {
    return {
        name: "Batman"
    };
}

关于分号应当注意:和花括号一样,应当总是使用分号,尽管在JavaScript解析代码时会补全行末省略的分号。严格遵守这条规则,可以让代码更加严谨,同时可以避免前面例子中所出现的歧义。
参考《javascript模式一书第二章》