大白话讲解闭包笔试题

 闭包可以解决函数外部无法访问函数内部变量的问题

通过闭包我们可以让函数中的变量持久保持。来看。

 function fn(){
    var num = 0;
   return function(){
    num+=1;
           alert(num);   
         };  
      }
      var f = fn();
      f(); //1
      f(); //2

因为函数一旦调用里面的内容就会被销毁,下一次调用又是一个新的函数

 function fn(){
        var num = 5;
        num+=1;
        alert(num);
     }  
    fn(); //6
    fn(); //6

我们首页定义了一个fn函数,里面有个num默认为0,接着返回了一个匿名函数(也就是没有名字的函数)。我们在外部用f接收这个返回的函数。这个匿名函数干的事情就是把num加1,还有我们用来调试的alert。

  这里之所以执行玩这个函数num没有被销毁是因为那个匿名函数的问题,因为这个匿名函数用到了这个num,所以没有被销毁,一直保持在内存中,因此我们f()时num可以一直加

 

 var name = "The Window";
  var object = {
    name : "My Object",

    getNameFunc : function(){
      return function(){
        return this.name;
      };
    }
  };

 alert(object.getNameFunc()());

object.getNameFunc()返回了一个匿名函数:

function(){   
return this.name; };
this对象是在运行时基于函数的执行环境绑定的, 
匿名函数的执行环境具有全局性, 
因此匿名函数的this指向window


 var name = "The Window";

  var object = {
    name : "My Object",

    getNameFunc : function(){
      var that = this;
      return function(){
        return that.name;
      };

    }

  };

 alert(object.getNameFunc()());

 

 

转载于:https://www.cnblogs.com/renzm0318/p/8966640.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值