大白话讲解闭包笔试题

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

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

 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()());
 

猜你喜欢

转载自www.cnblogs.com/renzm0318/p/8966640.html