立即执行函数:函数没有声明,只执行一次,执行过后即释放
注意:只有表达式才能加()立即执行
函数声明:function a(){...} 函数声明会提升,所以在a函数声明之前或者之后调用都可以,在函数表达式里面加(),会报错。
函数表达式:var test = function a(){...} 函数表达式,如果在表达式之前调用test(),这时test还未赋值,为undefined,那么会报错,test is not a function,在函数表达式后面加()表示立即调用
匿名函数: funtion (){...} 没有名称,报错,语法错误,加()也会报错
立即执行函数有两种声明方式
(function (){...}());或 (function (){...})() 括号表示立即调用,建议第一种
如下:
(function abc(){
var a = 111;
var b = 222;
console.log(a + b); //333
}())
立即执行函数的名称可以省略,这样也可以
(function (){
var a = 111;
var b = 222;
console.log(a + b); //333
}())
立即执行函数也可以传参
(function abc(a,b,c){
console.log(a + b + c); //6
}(1,2,3))
立即执行函数也可以给变量赋值,运算
var result = (function(a,b){
return a + b;
}(1,2));
console.log(result);//3
函数表达式后面加()也会立即执行
var result = function (){
var a = 1;
var b = 2;
return a + b;
}();
console.log(result); //3
在匿名函数前使用运算符号()、+、-、!,可以将函数声明或匿名函数转为函数表达式,这时在后面加(),可以立即执行,但是*、/、=、,、等加在函数表达式或匿名函数前会报错
//a可以省略
+function a(){
var a = 1;
console.log(a); //1
}();
-function a(){
var a = 1;
console.log(a);//1
}();
!function a(){
var a = 1;
console.log(a);//1
}();
(function a(){
var a = 1;
console.log(a);//1
}());