js立即执行函数通常用来创建一个独立的作用域并立即执行,常见的形式有小括号,或者一元运算符两种形式.立即函数内定义的任何变量或函数作用域也仅在当前立即函数体内.当然变量要有修饰符,不然就变成了全局变量.
js引擎会把小括号内解释为表达式,这样就可以定义函数并立即执行了
小括号括起来的匿名/非匿名函数,如果需要传参可以在定义时使用形参,调用小括号内传入实参,当然js函数的特性你也可以不声明形参使用arguments对象.
//使用小括号定义的立即执行函数
(function(){
...
})()
(function(a,b){
...
})(a,b)
//当然调用函数小括号也可以在内部
(function(){
...
}())
(function(a,b){
...
}(a,b))
//上面的匿名函数也可以是非匿名函数,当然除非是要用到递归调用,一般没必要,这个函数作用域仅在立即执行函数体内
(function test(a,b){
...
})(a,b)
一元运算符由于优先级原因,js引擎会把一元运算符后的部分解释为表达式,从而起到定义并立即执行的目的.常用的有+,-,!,~等.
形式和上面小括号的一样,只不过把小括号去掉,然后前面加上这些一元运算符即可.
下面随便列举两个,其它形式的自己根据上面类比
~function(a,b){
}(a,b)
~function test(a,b){
}(a,b)
当然上面的函数定义也可以使用ES6的箭头函数,根据上面的常见形式类比就可以了.