js 自动插入分号

先来看三个例证:

function get(){
    return 
    {
        a:1
    }

}
var r=get();
console.log(r);

仿佛r的值应该是{a:1},然则运行结果却是undefined,那就得从ecmascript的分行自动插入规则说起。

 

js的活动插入分号有多少个规则:

1,从左向右解析程序,当境遇不吻合词法文法产生式的token,只要知足下边条件之一就在违法token前自行插入分号:

a,至少有1个行终止符分隔了违规token和前1个token.

b,违规token是}

 

function a(){alert("function");}
a
()

那些会弹出警告框,因为()跟在a后边是合法的,所以不会插入分号。

 

2,从左到右解析程序,tokens
输入流已经终止,当解析器不恐怕将输入 token 流解析成单个完整 ECMAScript
程序 ,那么就在输入流的终结地方自动插入分号。

 

3,从左到右解析程序时遭受受限token(即该token与日前的token不可能插入换行符,不然运转结果不切合预期)时,会在受限token前插入分号。

受限token有
后缀表达式,continue break return throw。

例子:

var a=1,b=1
a
++
b
console.log("a:",a);
console.log("b:",b);

结果是a=1,b=2,所以在a后边插入了分公司。

 

 

ECMAScript,