zoukankan      html  css  js  c++  java
  • 作用域链

    
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    <script>
        1 var a = 1;
        2function fn1(){
         3        alert(a);                        // undefined
         4        var a = 2;
            5   }
        6 fn1();
         7 alert(a);                            // 1
    //    先预解析,从上到下找带有var function的关键参数
    //    先找一遍预解析:
    //    1、找到第一行a=...并没有赋值,且说未定义undefined
    //    2、找到函数
    //    function fn1(){
    //        alert(a);
    //        var a = 2;
    //    }
    //     3、找完所有的var function 之后开始解读代码:
    //     4、从头开始读到var a=1表达式;并将找到的a=1交给与解析的a
    //    4、遇到函数调用、在fn1函数内又开始预解析、找带有var function的关键参数
    //        找到var a=2;解析成a=...局部内的与解析结束了
    //     alert(a)开始找a,之前已经找到a=...未定义undefined 函数内部的之后在你逐句解读代码
    //     原来的a=1变成了a=2;(垃圾回收)
    //        这次找到的a=...替换原来的a...因此fn1()函数内alert(a)为undefined
    //    5、第七行的alert(a)逐句解读代码,找到a=1因此弹出a
    </script>
    </body>
    </html>
    
    

     

     
    
    
    var a = 1;
    function fn1(){
        alert(a);                        // 1
        a = 2;
    }
    fn1();
    alert(a);                            // 2
    1 var a = 1;
    2 function fn1(a){
    3     alert(a);                        // undefined
    4     a = 2;
    5 }
    6 fn1();
    7 alert(a);                            // 1
    var a = 1;
    function fn1(a){               //a相当于var a
        alert(a);                        // 1
        a = 2;
    }
    fn1(a);
    alert(a);                            // 1

     

    1)“先找一些东西”  :var  function 参数

    a = ...
    所有的变量,在正式运行代码之前,都提前赋了一个值:未定义
    fn1 = function fn1(){ alert(2); }
    所有的函数,在正式运行代码之前,都是整个函数块

    JS 的预解析

    遇到重名的:只留一个
    变量和函数重名了,就只留下函数
    2)逐行解读代码:
    表达式:= + - * / % ++ -- ! 参数……
    表达式可以修改预解析的值!

  • 相关阅读:
    ZOJ 1649: Rescue(BFS)
    UVA
    hdu2458:Kindergarten (最大独立集)
    hdu3829:Cat VS Dog (最大独立集)
    Java 泛型
    request.getParameter() 和request.getAttribute() 区别
    Solr版本安装部署指南
    java.sql.SQLException: Incorrect string value: 'xE6x88x91xE7x9Ax84...' for column 'groupName'
    Incorrect string value: 'xF0x9Fx98x84xF0x9F
    java里面byte数组和String字符串怎么转换
  • 原文地址:https://www.cnblogs.com/nifengs/p/4954369.html
Copyright © 2011-2022 走看看