JS高级,闭包、包装类

闭包

闭包就是内部的函数被拿到外部调用,会造成原本的作用域链不会被释放,就会造成内存泄漏

  • 上期讲到了什么是作用域链如果不了解可以去看看
  • 这个b是在函数内部声明的函数,这个函数属于a函数的作用域不能在外部被调用,如果被调用肯定会报错阻止进程,但是形成了闭包就可以被外部调用
  1. 那什么样会形成闭包呢,可以来说只要 return就是闭包了
  2. 逻辑:
    —全局作用域里面本来没有b这个函数,就不能被调用如果被调用就会报错,但是现在可以在全局里面被调用了不会报错
    是因为每个函数执行前会创建一个AO用来支持该函数运行用完立即销毁,但是现在一个函数里面还有一个函数,当函数a被执行完本来AO就该销毁了,但是想想如果a函数的AO被销毁了那里面的b函数怎么办呢,这时候就形成了闭包,a函数的AO就不会被销毁因为还有b函数没有被i调用,但是还需要return出去才能在全局里面调用。return了基本就是闭包
注意:形成了闭包一定会造成内存泄漏
       function a(){
           var num = 0;
           function b(){
               num++;
               console.log(num+"这是一个闭包");
           }
           return b;
       }
       var str = a();
       str()

在这里插入图片描述
—其实是把b函数返回给了a函数,外部需要一个变量来接收a函数执行返回来的值,这个值就是b函数,用外部声明的str执行b函数执行符号(),这里的知识也包含了作用域链

  • 什么是内存泄漏:一个函数运行之前创建支持该函数运行的AO用完就销毁,但是形成闭包了就无法销毁就会造成内存泄漏,久而久之多了内存就会卡顿

包装类

  1. Number()
  2. String()
  3. Boolean()
  • 包装类就是本来一个变量没有Number()、String()、Boolean()属于他们的方法比如:
  • 数字Number()类型的parseFloat()等等众多方法
  • 字符串String()类型的charAt()等等众多方法
  • 布尔Boolean()类型的true或false等等众多方法
    —都是通过JS的包装类给这些变量来包装这些方法所以才能使用方法和属性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值