javascript学习---作用域链

作用域是指对某一属性或方法具有访问权限的代码空间。

作用域链是用来描述一种路径的术语,沿着路径可以确定变量的值(或当前函数被调用时要作用的方法)。 

我们通常写的许多函数实际都是window对象的方法,在下面的方法中函数myFun和内置函数alert实际上都是全局window对象的方法。

1 function myFun(message){
2     alert(message);
3 }

实际myFun("Without window object");和window.myFun("Without window object");的执行结果是相同的。

如果你不是在window对象下而是在另一个具体的对象下创建的这个函数,那么由于作用域的关系,情况就会变得复杂。

代码
 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
 2 <html>
 3     <head>
 4         <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 5         <title>override the alert()</title>
 6         <script type="text/javascript" src="js/gp.js"></script>
 7         <script type="text/javascript">
 8             function override(){
 9                 //覆盖alert函数
10                 var alert=function(message){
11                     window.alert("overrideen:"+message);
12                 };
13                 alert("alert");
14                 //在override()函数的作用域中调用原始的alert()函数
15                 window.alert("window.alert");
16             }
17             override();
18             //在window的作用域中调用原始的alert()函数
19             alert("alert from outside");
20         </script>    
21     </head>
22     <body>
23         <h1>Override the alert() method</h1>
24         
25     </body>
26 </html>
27 

我们会看开弹出三个警告框

 

 

我们通过声明新的alert()方法已经覆盖了window的alert()方法,但这次覆盖只有在override()函数的作用域内部才有效,var 关键字将自定上义的新alert方法的作用域维持在了override()函数内部。而在新的alert()方法内部,通过引用window.alert()我们仍然可以访问到原始的、未被修改的、属于全局window对象的alert()方法,

 

 

 

posted @ 2010-04-23 16:12  郭培  阅读(235)  评论(0编辑  收藏  举报