不加“;”导致的出乎意料的类型错误
Bug代码如下:
js
function foo() {
console.log(this.a)
}
var a = 2
(function() {
'use strict';
foo()
})() // TypeError: 2 is not a function
原因
以上代码会被js的自动分号插入机制转化为:
js
function foo() {
console.log(this.a)
};
var a = 2(function() {
'use strict';
foo()
})();
()
代表执行函数,而2不是函数。所有引发了类型错误。
解决
应该在代码var a = 2
后面加上分号“;”,或者在IIFE(立即执行函数表达式)前面加上分号“;”。;(function (){...})()