递归
递归指函数自己调用自己
闭包指的是被函数分割形成的作用域,从而形成被保护的私有数据,这个被我们称之为闭包。在我们平常很少使用递归去计算,递归的消耗性能不可忽视,在计算比较小的值的时候我们可以忽略。
当然我们在使用的时候需要注意一些问题:
1.自己调用自己就相当于循环,以此达到一些便利。
2.我们在使用递归时候必须要有跳出的条件,不然就会出现死递归。
斐波拉切数列:
var fib = function ( n ) {
if ( n === 0 || n === 1 ) return 1;
return fib( n - 1 ) + fib( n - 2 );
};
闭包
要理解闭包,首先必须理解javascript特殊的变量作用域
1.全局作用域:在函数内外都能访问。
2.局部作用域:函数内部可以直接读取全局变量,函数外部无法访问函数内部的局部变量。
由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。
所以说,在本质上,闭包就是将函数内部和函数和函数外部链接起来的一座桥梁。
接下来我们来看一段代码:
const Greeters = []
for (var i = 0 ; i < 10 ; i++) {
Greeters.push(function () { return console.log(i) })
}
Greeters[0]() // 10
Greeters[1]() // 10
Greeters[2]() // 10
虽然期望输出0,1,2,…,然而实际上却不会。