JJavaScript 递归和预编译
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.预编译
-
函数声明的整体提升
-
变量声明的提升
函数的预编译
-
创建AO(activation Object)对象
-
找形参和变量的声明,将值赋为undefined
-
形参和实参的值相统一
-
找函数的声明,将值赋为函数体
全局的预编译
-
创建一个GO(global object)对象
-
找变量声明,将值赋为undefined
-
找函数声明,值赋为函数体
小case:
if里面不能声明函数
% / * - 两边转换成number
arguments:函数的实参列表。(数组)
3.解释执行