JJavaScript 递归和预编译

1.递归

1.找规律

2.找出口

eg: 阶乘

//规律:
    n!=n*(n-1)!;
 //出口
    n=1时
    //阶乘
function mul(n){
    if(n==1||n==2){
        return 1;
    }
  return n*mul(n-1);
}

eg:斐波那契数列

//规律
    fn=fn-1+fn-2;
//出口
    f1=1,f2=1;
function fb(n){
    if(n==1||n==2) return 1;
    return fb(n-1)+fb(n-2);
}
 

2.预编译

JavaScript是单线程,解释性语言

1.语法分析

2.预编译

  • 函数声明的整体提升

  • 变量声明的提升

函数的预编译

  1. 创建AO(activation Object)对象

  2. 找形参和变量的声明,将值赋为undefined

  3. 形参和实参的值相统一

  4. 找函数的声明,将值赋为函数体

全局的预编译

  1. 创建一个GO(global object)对象

  2. 找变量声明,将值赋为undefined

  3. 找函数声明,值赋为函数体

小case:

  ​ if里面不能声明函数

​   % / * - 两边转换成number

​   arguments:函数的实参列表。(数组)

  3.解释执行

posted @ 2017-10-12 23:39  im.lhc  阅读(148)  评论(0编辑  收藏  举报