(function a(){}) (命名函数表达式)会返回这个函数(不会执行),但是在括号外面无法调用该函数,需要一个变量接收这个函数,var fun = (function a(){}),一般这个用在递归上,比如
1 var fact = (function f(num){ 2 if(num === 1 ) 3 return 1; 4 else 5 return num * f(num - 1); 6 })
1.function a(){}(函数声明)返回undefined(不会执行),仅仅是函数声明(声明提前)
2.var res = function a(){}() (函数表达式),立即执行该函数,必须使用一个变量接收返回值,否则报错。
3.(function a(){})() (函数表达式),立即执行该函数,不必须使用变量接收。
示例代码:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 7 <title>Document</title> 8 <script> 9 //1.函数声明,不会执行。 10 function a() { 11 alert("函数a"); 12 } 13 14 //2.函数表达式,立即执行该函数,必须使用一个变量接收返回值,否则报错。 15 var res = function b() { 16 alert("函数b");; 17 }(); 18 19 //3.函数表达式,立即执行该函数,不必须使用变量接收。 20 (function c() { 21 alert("函数c") 22 })(); 23 </script> 24 </head> 25 <body> 26 </body> 27 </html>
总结
以上不同结果出现的原因是因为函数表达式和函数声明的区别。