(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>
總結
以上不同結果出現的原因是因為函數表達式和函數聲明的區別。