函数提升

71 阅读1分钟

函数提升比变量提升优先级高!

词法分析

词法分析方法:

js运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤:

分析参数

再分析变量的声明

分析函数说明

具体步骤如下:

函数在运行的瞬间,生成一个活动对象(Active Object),简称AO

分析参数

函数接收形式参数,添加到AO的属性,并且这个时候值为undefine,例如AO.age=undefine

接收实参,添加到AO的属性,覆盖之前的undefine

分析变量声明,如var age;或var age=23;

如果上一步分析参数中AO还没有age属性,则添加AO属性为undefine,即AO.age=undefine

如果AO上面已经有age属性了,则不作任何修改

分析函数的声明,如果有function age(){}

把函数赋给AO.age ,覆盖上一步分析的值

代码例子1

这样我们先通过一段代码来理解词法分析:

<script>
    function t1(age) {
        console.log(age);
        var age = 27;
        console.log(age);
        function age() {}
        console.log(age);
    }
    t1(3);
</script>