闭包以及闭包相关的面试题

闭包

利用执行空间不销毁
+ 函数的里面 返回一个引用数据类型
+ 在函数的外部 用一个变量去接收
+ 这样就可以让函数的执行空间不销毁

  • 闭包函数
    + 有一个外层函数outer 有一个里层函数inner
    + 外层函数 返回里层函数,在外层函数外部 有变量去接收
    + 里层函数使用着外层函数的私有变量
    闭包函数的应用
function outer(a){
            // var a =50 
            var  b = 100
            return  function inner(){
                  console.log(a)
                  console.log(b)
                  return a 
            }  
        }

        let  res = outer(50)
          console.log(res)
        let num =  res()
        console.log(num)

闭包的特点

         +  因为函数的执行空间不销毁 延长了变量的生命周期
         + 过多的使用闭包 造成内存的溢出
         + 在函数的外部 可以使用函数内部的变量 
         +  必须保证外部变量的引用内部函数
         + 可以存储私有变量 避免变量的全局污染 
         +  需要一直使用闭包去访问  

应用场景

  • 循环绑定事件
    + 沙箱模式
    + 防抖和节流
    + 单例模式
    + 函数的柯理化
    + vue data

闭包的相关面试题

 <script>
        function fun(n, o) {
            console.log(o)

            const obj = {
                fun: function (m) {
                    return fun(m, n)
                }
            }

            return obj
        }

        // var res = fun(0) //执行空间1  执行的是全局的fun  var n = 0  var o  console.log(o) //undefined
        //                 // 执行空间1 存储对象空间  存储函数空间都不会销毁  
        //     // console.log(res)            
        // res.fun(1)   // 执行的是obj里面的fun函数(存储在执行空间1里面的) // 执行空间2   var m = 1    执行空间2 会销毁
        //              //  执行return 后面的fun  就是调用的是全局的fun函数 // 执行空间3  fun(1,0)  var n = 1 o = 0  // 0
        // res.fun(2)   // 执行的是obj里面的fun函数(存储在执行空间1里面的) var m = 2
        //             //    执行return 后面的fun  就是调用的是全局的fun函数   fun(2,0)   var n = 2 o = 0 // 0
        // res.fun(3)
        // var b = fun(0).fun(1).fun(2).fun(3)
        // var b = fun(0)   //执行空间1  执行的是全局的fun  var n = 0  var o  console.log(o) //undefined
                         // 执行空间1 存储对象空间  存储函数空间都不会销毁  
        // var b = fun(0).fun(1)   // 返回一个obj 会有一个执行全局fun()执行空间3  var n = 1 o = 0   这个执行空间没有销毁
        // var b = fun(0).fun(1).fun(2)   // 返回一个obj 会有一个执行全局fun(2,1)执行空间4  var n = 2 o = 1   这个执行空间没有销毁 
        // var b = fun(0).fun(1).fun(2).fun(3)                     // fun(3,2)    // 2
        var c = fun(0).fun(1)
        c.fun(2)
        c.fun(3) 
        c.fun(100)
    </script>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值