函数前面的分号是什么意思?

won*_*ng2 3 javascript

我正在看一个开源项目,看到这样的事情:

;(function(){
    // codes here
})()
Run Code Online (Sandbox Code Playgroud)

我想知道分号是否有特殊含义?

Flo*_*ine 5

这是因为ASI(自动分号插入)允许您避免使用分号.

例如,您可以编写此类代码而不会出现错误:

var a = 1
a.fn = function() {
    console.log(a)
}
Run Code Online (Sandbox Code Playgroud)

看到?没有一个分号.

但是,有些情况下未插入分号.基本上,在实际项目中,有一种情况不是:当下一行以括号开头时.

javascript解析器将下一行作为参数,而不是自动添加分号.

例:

var a = 1
(function() {})()
// The javascript parser will interpret this as "var a = 1(function() {})()", leading to a syntax error
Run Code Online (Sandbox Code Playgroud)

为避免这种情况,有以下几种方法:

  • 在以括号开头的行的开头添加分号(在您显示的代码中完成)
  • 使用以下结构:

    !function() {}()