先解释下什么是闭包
闭包是一个受到保护的变量空间.
从字面意思来看就是封闭和包裹
为什么说函数是闭包?
在函数中定义的变量,在函数外部无法访问,因此这个函数就构成闭包
###特点:
在函数体内部允许访问外部的变量,但是外部不能访问外部的变量
###要解决闭包的什么问题
就是要访问到它的数据
###怎么样访问闭包中的数据
两个模型:
返回一个函数,用这个函数获得数据
返回一个对象,这个对象包含函数,来操作这个数据
##闭包的应用有两个模型
1.实现私有数据
2.实现缓存数据
2.1闭包做缓存
2.2函数名做缓存
下面我用斐波拉契数列来煮个栗子 (不知道斐波拉契数列的百度)
####斐波拉契常见的3种做法:1.递归 2.缓存 3.不用递归,直接用循环
写一个带有缓存功能的函数
var fib = function (n) {
//使用callee求兔子数列
if( n < 0) throw new Error('不能输入0');
if(n===0 || n ===1) return 1;
return arguments.callee( n - 1) +arguments.callee(n - 2);
};
for (var i = 0;i<=10;i++) {
console.log(fib(i));
}*/
但是