開發中遇到一個問題,代碼demo如下:
test.js文件內容:
1 var b = getHomeCity();
Test.html文件內容:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>Test HTML Page</title> 5 <script type="text/javascript" src="test.js"></script> 6 <script type="text/javascript"> 7 8 ( 9 function(window){ 10 alert(b); 11 } 12 )(window); 13 14 function getHomeCity(){ 15 return 10; 16 } 17 </script> 18 </head> 19 <body> 20 <!-- 這里放入內容 --> 21 </body> 22 </html>
運行后結果:
打開console發現報錯:
getHomeCity()未定義:
后來改了一下getHomeCity()函數位置:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>Test HTML Page</title> 5 <script type="text/javascript"> 6 function getHomeCity(){ 7 return 10; 8 } 9 </script> 10 <script type="text/javascript" src="test.js"></script> 11 <script type="text/javascript"> 12 13 ( 14 function(window){ 15 alert(b); 16 } 17 )(window); 18 19 </script> 20 </head> 21 <body> 22 <!-- 這里放入內容 --> 23 </body> 24 </html>
運行結果:
同一Script代碼塊中的函數調用:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>Test HTML Page</title> 5 <script type="text/javascript"> 6 7 var b = getHomeCity(); 8 ( 9 function(window){ 10 11 alert(b); 12 } 13 )(window); 14 function getHomeCity(){ 15 return 10; 16 } 17 </script> 18 </head> 19 <body> 20 <!-- 這里放入內容 --> 21 </body> 22 </html>
運行結果:
結論:
同一個Script代碼塊中,函數可以相互調用,根據函數定義提升原則,函數定義寫在前面或后面都可以執行該函數
但是不同的Script代碼塊之間調用函數,一定要在調用函數之前定義了該函數,否則會出現undefined的情況。