javascript学习---作用域链
作用域是指对某一属性或方法具有访问权限的代码空间。
作用域链是用来描述一种路径的术语,沿着路径可以确定变量的值(或当前函数被调用时要作用的方法)。
我们通常写的许多函数实际都是window对象的方法,在下面的方法中函数myFun和内置函数alert实际上都是全局window对象的方法。
1 function myFun(message){
2 alert(message);
3 }
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
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()方法,