ajax相关--查看文章
 
Javascript 作用域以及执行顺序
发布时间:2008-9-6
今天看Javascript 核心技术,看到一个很有说服力的代码,特此总结一下,以下是我对JS执行过程的理解,见代码
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2.   
  3. <html xmlns="http://www.w3.org/1999/xhtml">  
  4.   
  5. <head>  
  6.   
  7. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  8.   
  9. <title>Effect Field</title>  
  10.   
  11. <script type="text/javascript" src="global.js"></script>  
  12.   
  13. <script type="text/javascript" src="global2.js"></script>  
  14.   
  15. <script type="text/javascript">  
  16.   
  17. //定义全局变量   
  18.   
  19. message = "I'm in the page";   
  20.   
  21.   
  22.   
  23. function testScope() {   
  24.   
  25.     message += "\t called in testScope";   
  26.   
  27.     alert(message);   
  28.   
  29. }   
  30.   
  31. </script>  
  32.   
  33. </head>  
  34.   
  35.   
  36.   
  37. <body onload="testScope();global2Print();globalPrint()">  
  38.   
  39. <script type="text/javascript">  
  40.   
  41. message += "\t embedded in page";   
  42.   
  43. document.writeln(message);   
  44.   
  45. </script>  
  46.   
  47. </body>  
  48.   
  49. </html>  
浏览器会先解释所有的脚本语言,这里包括两个包含进来的JS文件和 两个本页的JS文件,首先message被赋值了 "I'm in the page",然后在本页的第二个JS脚本快中,又被+=了"\t embedded in page" ,所以此时message的值为 "I'm in the page embedded in page",然后document.writeln(message);会现在浏览器中画出I'm in the page embedded in page,然后在HTML的body标签中调用了3个方法,第一个方法testScope()中又将msaage+=了 "\t called in testScope",所以这个时候 alert出来的结果为 “I'm in the page embedded in page called in testScope”,再调用包含的JS文件 global2.js中的global2Print()方法  global2.js文件代码如下:
  1. function global2Print() {   
  2.   
  3.     message += '\t also accessed in global2Print';     
  4.   
  5.     alert(message);   
  6.   
  7. }  
又调用了global.js文件中的globalPrint()方法,与global2.js文件中不同的是,在这里,message定义为全局,没有定义在函数内部,所以在一开始 windows.onload之前,就已经载入了,所以此时message在这里应该为'undefined',所以不做累加,global.js文件代码如下:
  1. if(typeof(message) != 'undefined') message += '\t globally in globalPrint';   
  2.   
  3. //alert(typeof(message));   
  4.   
  5. function globalPrint() {   
  6.   
  7.     alert(message);    
  8.   
  9. }   
  10.   
  11. PS:在定义一个变量时,建议显示的使用关键字 var  这么做的好处是,有助于防止同名的局部变量和全局变量之间的冲突。  
 


免费电影
设为首页
加入收藏
不吊线谷歌
©2008 MyExt.cn
本站文章来自互联网,仅供学习和研究使用,如有版权问题,请发送Email:myext@126.com.