JS高级学习笔记 —— 072 词法分析

// 引例

<script type="text/javascript">

function a(b) { 
            alert(b);
            function b() {
                alert(b);
            }
            b();
        }
        a(1);

       /*
       function b() {
                alert(b);
            }

       function b() {
                alert(b);
            }
        */

</script>

/*
分析期:
0: AO = {}
1:
1.1 分析参数 AO= {b:undefined>
1.2 接收参数 AO= {b:1}

2: 分析var 声明,此函数没有var

3: 分析函数声明,AO = {b: function(){alert(b);}

执行期:
alert(b); // function
b(); // 由作用域寻找到a函数中的b,即function,alert() 出来
*/


/*
语法分析,分析3样东西

第1步: 先分析参数
第2步: 再分析变量声明
第3步: 分析函数声明

一个函数能使用的局部变量,就从上面的3步分析而来

具体步骤:
0:函数运行前的1瞬间,生成Active 0bject (活动对象),下称AO
1: 把声明的参数,形成AO的属性,参数的值即属性的值
2:分析变量声明声明声明! 如 var age,
如果AO上还没有age属性,则添加AO属性,值是undefined
如果AO上已经有age属性,则不做任何景响
3: 分析函数声明,如function foo() {),则把函数赋合A0.foo属性
注:如果此前foo属性已存在,则被无情覆盖
*/

 function t2(age) {
            alert(age);
        }

        t2(5); // 5
        t2(); //undefined

/*
分析过程:

0:形成AO = {}

1:
1.1 分析形参 AO = {age:undefined}
1.2 接收形参 AO = {age:5}

2:分析var age,发现AO已有age属性,不做任何影响

执行过程:
AO.age = 99;
alert(age);
*/


<script type="text/javascript">

        function t3(great) {
            var greet = 'hello';
            alert(greet);

            function greet() {

            }

            alert(greet);
        }

        t3(null); // hello hello 两个函数

</script>

/*
词法分析过程:
0: AO = {}

1:
1.1 分析形参 AO = {greet:undefined}
1.2 接收形参 AO = {greet:null}

2: 分析greet变量声明,AO已经有greet属性,因此不做任何影响

3:分析greet函数声明,AO.greet= function() {},被覆盖成函数

执行过程:
greet = ‘he11o’;
alert(greet);
alert(greet);
*/

猜你喜欢

转载自blog.csdn.net/dyw_666666/article/details/80137651