美文网首页
JavaScript基础 作用域

JavaScript基础 作用域

作者: 0说 | 来源:发表于2018-01-27 20:04 被阅读0次

    作用域:脚本的有效范围;分为2类:全局和局部
    只有函数才有局部,其他的没有 for if

    全局:
    1、在script标签下面的变量函数 ===>全局作用域
    2、直接定义在script标签下的变量称为全局变量,函数称为全局函数
    3、全局变量及函数都是window的一个属性,才能通过window.变量访问;
    例:

    <script>
      var a = 123;
      alert( window.a );//弹出123
      function ab(){}
      alert( window.ab );//弹出function ab(){};
    <script>
    

    局部:
    一个function就是个单独的域,也就是我们所说的局部,定义在局部变量/函数叫做局部变量 局部函数

    function fn(){
      var a = 10;
      alert( window.a ) ===>弹出undefined;
    }
    fn();
    

    这里的a是局部的a,不是window下的,window.a访问不到,不是window下的属性,所以是undefined;

    <script>
     var a = 20;
    function fn(){
      var a = 10;
    alert( window.a );//弹出20 访问的是window下的a
    }
    fn();
    </script>
    

    局部作用域里面,如果有函数产生并执行,那么在局部作用域里面会产生新的局部作用域;


    全局里有多个局部,局部只可以有多个局部;全局与局部变量怎么访问;

    作用域链

    1、子作用域在使用变量/函数的时候首先会从自身找(当前这一层),当自身能找到应用自己的,如果找不到会向上一层找。
    2、所有的儿子可以访问到各个父级(爸爸、爷爷....)



    子作用域:二是一的子作用域(父子作用域)

    例:

    var a = 20;
    function fn(){
        function x(){
           a ++;     
        }
       x();
       alert ( a ); //当层没有a会向上找,找到a = 20;  a++; a=21会返回给全局的a 
    }               //弹出 21
    fn();
    

    某些时,不太确定某一个全局变量是否存在的时候,又要去使用的话,我们可以通过window.的形式,这样就不会报错,不会阻碍后面代码的执行;

    例:

    var a = 10;              var a = 10;
    alert( b );    报错      alert(window.b)===>undefined  后面的代码会执行
    alert( b );   不执行     alert(1);
    

    当定义变量的时候,如果不加var而直接赋值的话(变量 = xxx;),无论全局还是局部相当于window.变量 = xxx的形式;

    例:

    一、
    <script>                                         <script>
      a = 10; 相当于window.a = 10;                     function fn(){
      alert( window.a )                                    a = 0; ===>没有加var 相当于window.a
    </script>                                         }
                                                      </script>
    

    函数参数的作用域

    function a( x , y ){
          alert( x );  //弹出5;
          var x = 10;
    }
    a( 5 , 10 );
    

    优先处理参数

    相当于
    
    function a(  ){
          var x = 5; //这都在最前面定义的
          var y = 10;
          alert( x );  //弹出5;
          var x = 10;
    }
    a( );
    

    相关文章

      网友评论

          本文标题:JavaScript基础 作用域

          本文链接:https://www.haomeiwen.com/subject/mjhoaxtx.html