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);
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

烟敛寒林o

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

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

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

打赏作者

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

抵扣说明:

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

余额充值