手记

专业挖坑500年之小心return语句

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空格)起作用,没有花括号{ }包裹,也容易产生坑,同样需要注意。

0人推荐
随时随地看视频
慕课网APP