Skip to content

不加“;”导致的出乎意料的类型错误

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 (){...})()