闭包
闭包:函数和声明该函数的词法环境的组合 (内部函数访问外部函数的变量的综合环境)
函数:内部函数
声明该函数:外部函数
词法环境:两个函数形成的作用域链
组合:两个函数以及作用域链形成的整体环境
闭包的形成条件: 有两个函数,是嵌套的关系,内部函数访问了外部函数的一个变量
//闭包的基本模型
//1.
function outer(){
var num = 1;
function inner(){
console.log(num)
}
return inner
}
//2.
function outer(){
var num =1
return function (){
console.log(num)
}
}
复制代码
闭包的作用
1.保护数据的安全
2.持久化维持数据
递归:
函数内部调用自己,需要留出口
var count=0
function fn(){
if(count<5){
fn()
}
}
fn()
复制代码
使用递归函数的思路:
1.把一个未知的问题转化成已知的问题 2.需要有结束条件,不然就是死递归
计算1-100的和
//sum(n)=sum(n-1)+n
function sum(n){
if(n==1){
return 1
}
return sum(n-1)+n
}
sum(100)
复制代码
解决兔子大量重复计算问题
已经计算过的放进内存,没计算过得计算
var cache={}
function fib(n){
if(n<2){
return 1
}
if(cache[n]){
return cache[n]
}else{
let res=fib(n-1)+fib(n-2)
cache[n]=res
return res
}
}
fib(10)
复制代码