zoukankan      html  css  js  c++  java
  • 关于js作用域

     <script></script>是一个域,如果页面中存在多个域,在页面中会一个域一个域的处理,并且会自上而下解析,如果变量在上面一个域中,下面的域中可以读到这个变量;

    例一:

    alert(a); // function a() {alert(4);}

    var a=1;

    alert(a); //1

    function a() {alert(2);}

    alert(a); //1

    var a=3;

    alert(a); //3

     function a() {alert(4);}

    alert(a);  //3

     a();不会调用function a() {alert(2);}或者 function a() {alert(4);},因为预解析仓库中没有任何函数了,最终的是a=3,所以a()相当于3();

     例二:函数也是一个域(同样有先预解析,再逐行执行代码)

    var a=1;

    function fn1() {

       alert(a);  //...

       var a=2; 函数自身的域中解析出a=...未定义

     fn1();

    alert(a); //1

     例三:

     var a=1;

    function fn1() {

       alert(a);  // 1 函数内部在预解析的时候没有找到任何变量,之后就会从子集作用域返回到父级作用域找,

        a=2; //此处的a有能力改变外部的变量var a=1;

     fn1();

    alert(a); // 2 

      例四:

     var a=1;

    function fn1(a) { //fn1(a)是一个局部变量,是一个空的值a=...

       alert(a);  // ...

        a=2; // a =2 没有改变外部变量var a=1

     fn1();

    alert(a); // 2 

      例五:

    1  var a=1;
     function fn1(var a=1:这里有下面fn1(a)传进来的参数a,此时的a来自全局变量 var a =1){
      alert(a); //1
      a =2; a就近原则 找到局部的变量 并改为2
     } 
      fn1(a);

      alert(a);  //1

      例六:内部怎么访问外部变量,想要获取函数内部的值,有两个方案;

    方案1 

    var str =''; //var str =大鸡腿~'';

     function fn1(){

    var a ='大鸡腿~';

    str =a; 

     }

    fn1(); 

     alert(str);

     方案2

      function fn2(){

     var a ='1223333;

     fn3(a);

    }

    fn2(); //先预解析,然后解读代码,执行到fn3(a)的时候,在内部找不到fn3 然后去父级找fn3,找到之后可以把变量传进去,也就是说在函数fn2内部可以调用外部函数fn3,并且传进参数。

      function fn3(a){

    alert(a); //1223333

    }

       例六:

    alert(a); 

    if() {

    var a=1;

    } 不是一个作用域 是一个通透的,var a=1放在里面和外面是一样的,

     ps:

    alert(fn1); //FF不能对下面的函数进行预解析,所以要想定义全局的函数或变量,尽量不要在if等语句中定义,这样会出现浏览器不兼容。

    if() {

    var a=1;

      function fn2(){

    alert('123');

    }//

    }

  • 相关阅读:
    css3 动画
    jQuery toast 淡入淡出提示
    JavaScript事件——拖拉事件
    Vue -- element-ui 限制只能输入number
    css 移动端页面,在ios中,margin-bottom 没有生效
    django 快速搭建blog
    python 正则表达式口诀
    [转]python os模块 常用命令
    【转】scapy 构造以太网注入帧
    【转】关于Scapy
  • 原文地址:https://www.cnblogs.com/hilxj/p/7482636.html
Copyright © 2011-2022 走看看