闭包总结

作用域

要想理解什么是闭包就必须知道作用域的概念。
变量的作用域无非就是两种:全局变量和局部变量。
但是我们可以在任何地方访问全局变量。但是局部变量形成的作用域只能在代码块内访问。例如:

  function f1(){
  var b=2;
  }
  f1(); 
  console.log(b) 
  这里我们在外界是无法访问b的,因为b定义在函数里边

所以如果想访问这个变量,该怎么做呢

不妨在函数内部在顶一个函数
 function f1(){
  var b=2;
  var c = funtion(){
     console.log(b)
    }  
		return c ;
  }
  var d = f1(); 
  d();
  由于函数c是f1的子函数,所有他可以访问到f1内部变量
  将它作为返回值保存到外部,那不就可以访问到变量了吗。

闭包的概念

我的理解来说,闭包就是能够读取其他函数内部变量的函数。

标题 闭包用途:

  • 实现累加器
function a() {
        var num = 100;
        function add() {
            num++;
            console.log(num);
        }
        return add;
        }
    var demo = a();
    demo(); // 101
    demo(); // 102
  • 实现给定时器传参
  function func(param) {
     return function () {
            alert(param)
         }
     }
    var f1 = func(1);
    setInterval(f1, 1000);

缺点

  • this指向改变
var name = outer;
var object = {
     name: ''inner",
     getName: function() {
        return function() {
             console.log(this.name)
        }
    }
}
object.getName()()    // outer
// 因为里面的闭包函数是在window作用域下执行的,也就是说,this指向windows
  • 内存泄露问题
    由于变量被保存到外部,导致作用域链无法释放,会使变量一直存在于内存中。所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值