一、函数作用域链
在js函数中可以定义函数,在局部作用域中也可以再有局部作用域,从而形成作用域的嵌套,形成了一种链式结构。
var a = 10;
function fn(){
var b = 20;
function fun(){
var c = 30;
}
fun()
}
fn()
当使用变量(将变量当做值赋值,输出变量,使用变量计算)的时候,先在当前作用域中找是否定义过变量,如果定义过,就使用;如果没有定义过,就去上一级作用域中找是否定义过,定义过就使用,没有定义就继续去上级作用域中找,......直到找到全局,全局中如果定义过,使用的就是全局中的变量;如果全局中没有定义过,报错:XXX is not defined
二、递归函数
递归函数是一个函数在它函数内调用自身。执行函数将反复调用其自身,调用一次就进入新的一层,所以递归函数必须有结束条件。
例如求阶和:function facSum(num){
if(num == 1){
return 1;
}
return num + facSum(num-1);
}
var res = facSum(10);
console.log(res); // 55
递归的时候,每调用一个函数,计算机都会为这个函数分配新的空间,就是当函数返回的时候,调用函数中的变量依然会保持原先的值,否则也不可能实现反向输出