函数前加一个 ; 有什么特殊含义

;(function (factory)

前面这个;什么意思?

阅读 2.6k
4 个回答

防止上一行结束没有;造成编译错误,例如

// 这个时错误的
(function () {console.log('11111')})()
(function () {console.log('22222')})()
// 正确的
(function () {console.log('11111')})();
(function () {console.log('22222')})()
// 也是正确的
(function () {console.log('11111')})()
;(function () {console.log('22222')})()
  • 所以,为了防止合并多个js造成的错误,一般我都会前后加;,保证不会受别人的代码影响
;(function () {console.log('11111')})();
;(function () {console.log('22222')})();

看上去是个 IIFE(立即执行函数)。

分号就是语句结束,好跟前面的代码隔离,防止出现某些错误。

// 没分号,下面代码会报错
var a = 12
var b = a
(function () { var e = 14; }())

// 有分号,下面代码正确执行
var a = 12
var b = a
;(function () { var e = 14; }())

写在函数前后一样;为了结束前一段代码;防止出错;

仔细看一下, function 前面是有个圆括号的。在 JS 中,圆括号除了用来提升表达式的优先级,还可以用来 包裹函数的参数列表 ,在声明函数的时候如此,在执行的时候也是如此。
JS 语法允许表达式末尾不写分号 ;,如果上面一行的人没写分号,而下面一行又以圆括号开头的话,引擎就会认为圆括号里是上面一个表达式返回的函数的参数列表,会把他们拼在一起尝试执行,得到意外的结果,或者发生错误。
为了避免写上面一行代码的人忘了写或不喜欢写分号,以圆括号开头的代码行一定要自带一个分号,当然,自己也要养成分号结尾的好习惯。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题