JavaScript作用域

  学习JavaScript中,作用域算是比较重要的一块,因为比较抽象,所以很多人都难免模模糊糊,包括我自己也是这样
  所以我自己写下了自己的理解,如果有什么不对的,请指出谢谢..
js解析顺序和作用域 js的解析顺序是按照作用域来读取代码
  那么什么是作用域呢,JavaScript本身就是一个最大的作用域, 
  每一个函数执行的时候都会产生一个作用域.  
 很多人认为js的解析顺序是从上到下的,这是错误的 
  举个例子:   var a =10;  
               alert(a);  
            代码会弹出10,   
            alert(a);  
            var a=10; 
          这时候会弹出一个undefined,而不是报错,说明什么,说明里面已经有一个变量a,但是没有赋值 
 每一个域里面代码的解析顺序:  
     1.定义:   找var (只会找出变量名,但是并不会执行后面的赋值)
               找function; 
     2.执行:   从上往下执行代码;
  
 我们在来看看作用域  
 我们来看一个例子  
 <script>   
      var a=10;//全局变量 
  </script>
   <script>  
    alert(a)
      </script>  
 结果却显示可以弹出结果,按理说两个域之间是不可以相互跨越的 . 
  但 var a相当于window.a ,也就是全局变量, 
相当于定义在window对象下.  
 那么我们在举个例子 , 
           var a=0;  
          function mun(){    var b=50;   }  
          这个是全局变量么 ,答案肯定不是 ,上面已经说到每个函数都有一个自己的域,
          而这个b 的作用域就是这个函数
          而a是在script声明的,所以他是全局变量.. 
         作用域链 :   
          举一个例子:  
          var a=10; 
           Fn();  
          a=20; 
          function Fn()
        {   var b=20;   alert(a);   alert(b);
          }  
        执行顺序   
          1: 定义: 找变量 var a       
                       找函数体 function Fn(){   
                         var b=20;     
                         alert(a);     
                        alert(b);   
                          } 
           2:执行:     
                 a=10;  
                Fn()==>执行函数,进入Fn()作用域   ====>1:定义 var b                                   
                                                                               2: 执行:                       
                                                                                 b=20;                        
                                                                               alert(a);  //最终弹出10               
                                                                               alert(b)   //最终弹出20 
           在来看一个例子:  
          var a=10; 
          var b=15;  
          Fn();  
          a=20; 
          function Fn(){    
           var a=5; 
           b=20;  
          alert(a);   
           alert(b); 
             }   
              alert(a);   
             alert(b);     
            解析顺序:     
                         1. 找变量  var a;          
                                        var b;      
                             找函数体 function Fn(){                  
                                    var a=5;          
                                      b=20;        
                                     alert(a);         
                                     alert(b)         
                                                              }      
                             2.执行 a=10;        
                                     b=15;        
                                     Fn(); ====> 1.var a              
                                                         2. a=5;                 
                                                           b=20;                
                                                         alert(a)//5          
                                                       alert(b)//20        =====>返回父级作用域 (script)    
                                                                                               a=20;   
                                                                                              alert(a); //20  
                                                                                               alert(b) //20  
                                                 注意:函数里面的 b=20;
                                 没有var 所以他是全局变量window.b    
                              所以在全局的b=15 被重新赋值为20; 
                                下面的几个例子我就不写顺序了 ...  
                        var x=5;    
                           a();   
                       function a(){      
                        alert(x);  //undefined;     var x=10; 
                                         }  
                         alert(x); //5
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

对酒丶当歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值