js-----词法分析过程

《开场白》
JavaScript代码自上而下执行,但是在js代码执行前,会首先进行词法分析类似预编译的样子吧,所以事实上,在函数运行时js运行要分为词法分析和执行两个阶段。

词法分析的三步走

  1. 分析参数
  2. 再分析变量声明
  3. 最后分析函数声明

先来看个例子跟着分析一下看看结果对不对
【一】

<script>
    function t(age) {
        console.log(age);//1-------function age()
        var age = 99;
        console.log(age);//2-------99
        function age() {}
    console.log(age);//3-----------99
}
t(18);
<script>

词法分析:
1-1、把函数运行的瞬间,生成的Active Object(活动对象)AO分析参数,有一个参数,形成一个AO.age=undefine;
1-2、接收参数AO.age=5;
2、再分析变量声明,有一个var age,发现AO上面有一个AO.age,则不做任何处理。 如果AO上没有age属性 则添加AO属性 值为undefined
3、最后分析函数声明,有一个function age(){}声明, 则把原有的age覆盖成AO.age=function(){};
执行过程:
1、执行第一个console.log(age)时,当前的AO.age是一个函数,所以输出的一个函数。
2、var age=99;是对AO.age的属性赋值,AO.age=99,所以在第二个输出的是99。
3、同理第三个输出的是99,因为中间没有改变age值的语句了。

【二】
//如果不对age进行赋值

 function t(age){
    var age;//这里没有赋值
    console.log(age);//-------------function age()
    function age(){
        console.log(age);//---------function age()
    }
    age();
    console.log(age);//-------------function age()
 }
 t(18);

这里没有对age的赋值,词法分析出age是一个函数,当这个函数执行的时候,age函数的内部没有age变量,根据作用域到外层的函数去找,找到了一个age,但它还是一个函数,又再次输出函数,后面一个也是如此,所以结果是三个函数

//如果将 函数声明 转变成 函数表达式
【三】

function t(age) {
    console.log(age);//-----------------18
    var age = function () {
        console.log(age);//-------------function  age()
    }
    age();
    console.log(age);//-----------------function age()
}
t(18);

先说下函数的表达式,如果把表达式拆开也就明白了。
拆成如下的结果:var age;age=function(){},也就是函数表达是其实是一个变量声明和赋值的过程,而不是一个真正的函数声明!所以有了前面的基础,这个输出就很简单了.
就算age = function age(){} 赋值的不是匿名函数 ,结果也是一样的。

记笔记咯————————————函数声明 与 函数表达式区别
//age1函数声明
function age1(){
}
//age2赋值过程
age2 = function(){
}
age1 age2 两种方式在词法分析时
有着本质区别
前者 在词法分析阶段就发挥作用
后者 在运行阶段才发挥作用

《结束语》

走路是一步一步,学习则是把原路记住。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值