js闭包

来源:互联网 发布:软件数据接口标准 编辑:程序博客网 时间:2024/06/07 21:04

所谓闭包,就是变量 从外部开始,到达父函数体,然后再从父函数体内的函数(子函数) 返回到父函数体,简单一句话概括:函数外部调用函数内部的变量。

通过下面的代码给出结果,解释一下你的答案:

  1. var fullname = 'John Doe';
  2. var obj = {
  3. fullname: 'Colin Ihrig',
  4. prop: {
  5. fullname: 'Aurelio De Rosa',
  6. getFullname: function() {
  7. return this.fullname;
  8. }
  9. }
  10. };
  11. (1)console.log(obj.prop.getFullname());
  12. (2)var test = obj.prop.getFullname; //可以写成window.obj.prop.getFullname
  13. console.log(test());

答案:

 Aurelio De Rosa 和John Doe。一直没理解为什么输出是这样的,看到一个有关函数声明和函数表达式的说明和之前的js执行的过程(从声明开始再是表达式),觉得还是可以解释下这个问题的;

再看个例子:

var name = "The Window";  var object = {    name : "My Object",    getNameFunc : function(){      return function(){        return this.name;      };    }  };


  alert(object.getNameFunc()()); //可以写成window.object.getNameFunc();


     代码片段2:

 

var name = "The Window";  var object = {    name : "My Object",    getNameFunc : function(){      var that = this; //这里的this指代的就是object本身了。      return function(){        return that.name;      };    }  };

  alert(object.getNameFunc()());

再看一个例子:

(function(){       var result=[];   for(var i=0;i<10;i++){       result[i]=function(){       return i;  }    }alert(result[1]());})();









0 0
原创粉丝点击