先说说分号,简单说就是为了与前面的代码隔开,javascript可以用换行分隔代码,但是合并压缩多个js文件之后,换行符一般会被删掉,所以连在一起可能会出错,加上分号就保险了。
至于前面的感叹号和后面的括号都来自于匿名函数,简单说前面感叹号就是为了立刻执行匿名函数,而后面的括号它可以解释成为“匿名函数自调用”,传送的参数可以多个数字、函数等,括号有多少个函数,自调用就会有多少次。
// 这么写会报错,因为这是一个函数定义:
function() {}()
// 常见的(多了一对括号),调用匿名函数:
(function() {})()
// 但在前面加上一个布尔运算符(只多了一个感叹号),就是表达式了,将执行后面的代码,也就合法实现调用
!function() {}()
前面的!号可以换成-+~等等一元操作符,从而省下了1字节。