JavaScript引擎有一个在行末自动添加分号的机制,这可能让你栽到return语句的一个大坑:
function foo() {
return { name: 'foo' };
}
foo(); // { name: 'foo' }
如果把return语句拆成两行:
function foo() {
return
{ name: 'foo' };
}
foo(); // undefined
由于JavaScript引擎在行末自动添加分号的机制,上面的代码实际上变成了:
function foo() {
return; // 自动添加了分号,相当于return undefined;
{ name: 'foo' }; // 这行语句已经没法执行到了
}
所以正确的多行写法是:
function foo() {
return { // 这里不会自动加分号,因为{表示语句尚未结束
name: 'foo'
};
}
为了减少掉坑,注意要加{ },特别是循环语句只存在单行语时,虽然是允许并且能运行的,但当再添加一个语句时,就会超出代码块的作用范围了。比如:
if( x > 10 ){
x = 0;
}
else x++; // 当else后面为单独语句,通常是没问题的
if( x > 10 ){
x = 0;
}
else x++;
y++; // 添加一个语句,则此语句会一直执行。y++;语句不属于else后的作用域,加上{}才属于else作用范围
另:在Python2中,代码块由代码缩进(通常4空格)起作用,没有花括号{ }包裹,也容易产生坑,同样需要注意。