闭包 递归

闭包

闭包:函数和声明该函数的词法环境的组合 (内部函数访问外部函数的变量的综合环境)

函数:内部函数

声明该函数:外部函数

词法环境:两个函数形成的作用域链

组合:两个函数以及作用域链形成的整体环境

闭包的形成条件: 有两个函数,是嵌套的关系,内部函数访问了外部函数的一个变量

//闭包的基本模型
//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)
复制代码

转载于:https://juejin.im/post/5cb97acce51d456e3b701894

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值