js闭包和包装类

闭包

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

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

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

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

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

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

  1. 模块化开发

  2. 防止污染全局变量

var name = 'abc';//全局变量
var init = (function() {
    var name = 'ljc';
    function callName() {
        console.log(name);
    }
    return function () {
        callName();
    }//返回一个函数形成闭包,留有父函数的AO{name: 'ljc'}
}())
init();//ljc
  1. 缓存(存储结构)
防范

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

利用闭包解决for循环绑定事件的问题
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();

包装类

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

var num = 4;//这里的num是原始值没有属性和方法

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

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小丞同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值