前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >js闭包和包装类

js闭包和包装类

作者头像
小丞同学
发布2021-08-16 16:04:34
4680
发布2021-08-16 16:04:34
举报
文章被收录于专栏:小丞前端库

闭包

内部函数被返回到外部,函数本身保留了父函数的AO,即使父元素执行完了,取消对AO的引用,但依旧被子函数保留下来了,就形成了闭包。

闭包会导致原有作用域链不释放,造成内存泄漏。

作用

1. 实现公有变量(累加器)

因为子函数保留有父函数的AO,并在此基础上搭建自己的AO,所以父函数的AO会被作为一个公有变量被使用,即使函数执行完毕,也只会销毁自己创建的AO对象。

2. 实现封装,属性私有化

简单理解就是函数结束会销毁父函数的执行上下文,但是应用闭包可以使父函数的执行上下文被保留下来,给父函数下的其他函数使用,这样就实现了属性的私有化

3. 模块化开发

4. 防止污染全局变量

代码语言:javascript
复制
var name = 'abc';//全局变量
var init = (function() {
    var name = 'ljc';
    function callName() {
        console.log(name);
    }
    return function () {
        callName();
    }//返回一个函数形成闭包,留有父函数的AO{name: 'ljc'}
}())
init();//ljc

5. 缓存(存储结构)

防范

闭包会导致多个执行函数共用一个公有变量,应当尽量避免

利用闭包解决for循环绑定事件的问题
代码语言:javascript
复制
function test(){
   var liCollection = document.getElementByTagName('li');
   for(var i = 0; i < liCollection.length; i++){
      (function (j){
         liCollection[j].onclick = function(){ //把函数绑定到了每个li元素(外部)
            console.log(i);
         }
      }(i))
   }
}
test();

包装类

原始值没有属性和方法,强行添加属性或者访问属性的话,系统就会新建一个包装类,然后在包装类上进行操作,操作完成后再销毁。

代码语言:javascript
复制
var num = 4;//这里的num是原始值没有属性和方法

num.len = 3;//强行添加属性
//new Number(4).len = 3;执行完立刻销毁 delete
//再次调用的时候再次生成Number()
//new Number(4).len
consloe.log(num.len);

数组在改小length的时候会被截短

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/03/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 闭包
    • 作用
      • 防范
        • 利用闭包解决for循环绑定事件的问题
        • 包装类
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档