本篇介绍的ASI的作用机制
ASI会自动在js的最后一段补上分号;
但这样的机制有时候也并非是好事。
function callName () { return '叫我小明';}console.log(callName);
这样的执行结果,会出现undefined。
因为ASI自动在return的后方加上了分号,所以程式码只执行到return一个空的东西就结束。
另外还有
if (1 > 10) a = 1 else a = 2 console.log(a)
这样的执行结果没有问题,a会等于2
但如果我们要变成同一行写法的话就会出现语法错误
if (1 > 10) a = 1 else a = 2 console.log(a)
所以结论就是,撰写的时候还是自己加上分号比较好。
ASI 补充说明
“不会” 发生 ASI 的规则:
新的一行是(
、[
、/
开始 (容易出错的地方)var a = 1var b = a(a + b).toString() (function() { })()(function() { })() var a = 1var b = a/test/.test(b)
新的一行以 +
、-
、*
、%
作开始 (会影响执行结果)var a = 2var b = a+a
新的一行以 ,
、.
作开始 (需注意执行结果)var a = 2var b = a.toString()console.log(typeof b) var a = 1,b = 2 // b 一样会 var 被宣告
因此,遇到以上的标点符号前方加入分号也是解决办法
ex:
// 执行错误(function() { })()(function() { })() // 正确;(function() { })();(function() { })()
以上就是本篇的分享~汪汪