codewarshelloworld被隐藏了的过程javascript学习之路

javascript 分号结尾的问题

2019-01-09  本文已影响0人  b64c74899092

javascript 分号结尾的问题

并不是 全部加分号 或者 全部不加分号 的问题,而是什么时候可以加,什么时候必须加,什么时候可以不加


分号的作用

但是分号并不一定是语句的结尾:

function add(){
    var a=1;
    return
        a;
}

上面返回值是 undefined 而不是 1,因为 return 后面有换行符,相当于:

function add(){
    var a=1;
    return;
    a;
}

由于 ECMAScript 的自动插入分号(ASI)标准,在语句或者一段代码后,加了回车,解析器会在执行期间自动帮你插入分号。


ASI 例外情况

下面情况是在使用回车或换行,但是不会自动插入分号作结尾:

// example 1
var a = 
[1,
2,
3,
]

// example 2
function test(a,
b,
c){
    console.log(a,b,c
    )
}
a=1
++
console.log(a)
if(...)
 console.log(...)
else
 console.log(...)
function test(){
    return 1
          +2
          -3
}
var i=1

// 这之间不管有多少换行都不会自动插入分号

if(i==2)

一定要使用分号的情况

分号不只是语句结尾使用,在某些语法中,具有分隔表达式或语句的作用:

for(var i=0;i<10;i++)
// example 1
var i=0; i++

// example 2
case 'foo': dosomething(); break
// example 1
;(x||y).doSomething()
;[a,b,c].forEach(doSomething)

// example 2
var x = 2
;(function(){})()

不需要使用分号的情况

for(var i=0;i<12;i++;){}
// 不建议加
function a(){};
if(){};

// 可以加
var obj = {a:1};
var foo = function(){};
do{...} while{...};
if(a==1);{console.log(a)}

// 相当于
if(a==1);
console.log(a);

总结

是否使用分号作为语句结尾,在按照上面规则的情况下,可以根据个人习惯或者团队风格。

npm bootstrap 还有比较火的开源应用都不使用分号

上一篇 下一篇

猜你喜欢

热点阅读