JavaScript(递归,预编译)

1.递归
特点:符合思维逻辑,代码简单,但耗费时间空间复杂度
注意事项:1.找规律,2.找出口
2.预编译

js三部曲:语法分析,预编译,解释执行

2.1预编译特点:

  • 函数声明整体提升(所有函数声明提升到最前面)
  • 变量 声明提升 (变量声明在赋值之前)
b=10;
var b;
不会报错,b值为undefined

  • imply global暗示全局变量

即任何变量未经声明就进行赋值,则为全局变量

例:a=10;
可用window.a进行访问

  • 一切声明的全局变量,都是window属性,即都可用window.变量名进行访问
2.2预编译步骤:
  • 创建GO对象(执行3,4,5)
  • 创建AO对象(执行3,4,5)
  • 找形参和变量声明,将形参和变量作为AO属性名,值为undefined
  • 将实参值和形参值统一
  • 在函数体里面找函数声明,将值赋给函数体

2.3例子

 function fn(a) {
        console.log(a);
        var a = 123;
        console.log(a);
        function a() {

        }

        console.log(a);
        var b = function () {

        };
        console.log(b);
        function d() {

        }
    }
    fn(1);
    /**
     * 1.创建AO对象
     * AO{}
     * 2.找形参和变量声明,将形参和变量名作为AO对象的属性名,值为undefined
     * AO{
     *  a:undefined,
     *  b:undefined
     * }
     * 3.将形参和实参统一
     * AO{
     * a:1,
     * b:undefined
     * }
     * 4.寻找函数声明,并将值赋给函数体
     * AO{
     * a:function a{},
     * b:undefined,
     * d:function d{}
     * }
     *
     *
     *
     */
  /**
     * 1.创建GO
     * GO{}
     * 2.寻找变量声明,将变量名称作为GO 的属性名,值为undefined
     * GO{
     * a:undefined
     * }
     * 3.将实参和形参统一
     * GO{
     * a:100
     * }
     * 4.寻找函数声明
     * GO{
     * a:undefined,
     * demo:function demo{}
     * }
     * 5.创建AO对象
     * AO{}
     * 6.寻找形参和变量声明,将形参和变量名称作为AO的属性名,属性值为undefined
     * AO{
     * e:undefined,
     * a:undefined,
     * c:undefined,
     * b:undefined
     * }
     * 7.将形参和实参统一
     * AO{
     * e:1,
     * b:undefined,
     * a:undefined,
     * c:undefined,
     * f:undefined,
     * }
     * 8.寻找函数声明,将值赋给函数体
     * AO{
     * e:function e {},
     * a:undefined,
     * b:undefined,
     * c:function c{},
     * f:undefined
     * }
     * 9.执行后
     * AO{
     * e:2,
     * a:10,
     * b:undefined,
     * c:undefined,
     * f:123
     * }
     *
     */
    a = 100;
    function demo(e) {
        function e() {
        };
        arguments[0] = 2;
        console.log(e);
        if (a) {
            var b = 123;

            function c() {
            };
        }
        var c;
        a = 10;
        var a;
        console.log(b);
        f = 123;
        console.log(c);
        console.log(a);
    }
    var a;
    demo(1);
    console.log(a);
    console.log(f);



猜你喜欢

转载自blog.csdn.net/u012691505/article/details/80563661